最近2018中文字幕在日韩欧美国产成人片_国产日韩精品一区二区在线_在线观看成年美女黄网色视频_国产精品一区三区五区_国产精彩刺激乱对白_看黄色黄大色黄片免费_人人超碰自拍cao_国产高清av在线_亚洲精品电影av_日韩美女尤物视频网站

RELATEED CONSULTING
相關咨詢
選擇下列產品馬上在線溝通
服務時間:8:30-17:00
你可能遇到了下面的問題
關閉右側工具欄

新聞中心

這里有您想知道的互聯(lián)網營銷解決方案
python圖形旋轉函數 python繪制3d可旋轉圖形

如何用Python+Pygame旋轉圖像、灰度圖像

‘’‘

創(chuàng)新互聯(lián)是一家專業(yè)從事網站建設、網絡營銷、重慶小程序開發(fā)、網站運營為一體的建站企業(yè);在網站建設告別千篇一律,告別似曾相識,這一次我們重新定義網站建設,讓您的網站別具一格。響應式網站,實現(xiàn)全網營銷!一站適應多終端,一樣的建站,不一樣的體驗!

2013-7-4

by JavenLee

希望能帶給你啟發(fā)

'''

import Image

img = Image.open(‘origin.png’) # 得到一個圖像的實例對象 img

rot_img = img.rotate(270) #順時針旋轉90度

rot_img.save("rot_img.jpg")

x_img=img.transpose(Image.FLIP_LEFT_RIGHT) #垂直翻轉

y_img=img.transpose(Image.FLIP_TOP_BOTTOM) #水平翻轉

new_imag=img.convert('L')

'''

模式

img.convert() 參數說明如下:

1 1位像素,黑和白,存成8位的像素

L 8位像素,黑白

P 8位像素,使用調色板映射到任何其他模式

RGB 3×8位像素,真彩

RGBA 4×8位像素,真彩+透明通道

CMYK 4×8位像素,顏色隔離

YCbCr 3×8位像素,彩色視頻格式

I 32位整型像素

F 32位浮點型像素

'''

OpenCV Python實現(xiàn)旋轉矩形的裁剪

環(huán)境

矩形操作是我們在 OpenCV 里最常用的操作,其中最為常見的就是包圍框( Bounding Box )和旋轉矩形( Rotated Box )。 其中包圍框是最為常見的,對應 OpenCV 中的 boundingRect() ,使用正矩形框處物體,一般多用在目標檢測中。使用包圍框框柱目標物體,這種操作比較簡單,但是通??蛑幸矔幸恍┢渌膮^(qū)域。其次就是使用旋轉矩形,也叫最小外接矩形,對應 OpenCV 中的 minAreaRect() ,用來使用旋轉矩形最大限度的框出目標物體,減小背景干擾,在 OCR 任務中較為常用。

minAreaRect() 返回了所需區(qū)域的最小斜矩形的參數,與包圍框直接返回四個頂點的坐標不同,最小外接矩形返回的是矩形的 ((x, y), (w, h), angle) ,對應了矩形的中心,寬度,高度和旋轉角度。

旋轉角度 angle 是水平軸( x 軸)逆時針旋轉,與碰到的矩形的第一條邊的夾角。并且這個邊的邊長是 width ,另一條邊邊長是 height 。也就是說,在這里 width 與 height 不是按照長短來定義的。

在 OpenCV 中,坐標系原點在左上角,相對于 x 軸,逆時針旋轉角度為負,順時針旋轉角度為正,所以函數 minAreaRect() 返回的角度范圍時 [-90~0) 。想象一個平放的長矩形,調用 minAreaRect() 返回的角度為 -90 度。如果我們旋轉圖像,直到矩形樹立起來,這是調用 minAreaRect() 得到的角度依然是 -90 度。

第一種裁剪旋轉矩形的方法是通過仿射變換旋轉圖像的方式。

仿射變換( Affine Transformation ) 是一種二維坐標到二維坐標之間的線性變換,保持二維圖形的“平直性”( straightness ,即變換后直線還是直線不會打彎,圓弧還是圓?。┖汀捌叫行浴保?parallelness ,其實是指保二維圖形間的相對位置關系不變,平行線還是平行線,相交直線的交角不變。)。

計算過程:

如果不做邊長和角度的判斷,則只會沿著 x 軸的順時針方向做相同大小角度的旋轉,不能保證旋轉后的視角是正確的視角:

根據任務目標的類型,做邊長和角度的判斷并進行相應的調整,可以保證旋轉后的視角是正確的視角:

第二種裁剪旋轉矩形的方法是通過透視變換直接將旋轉矩形的四個頂點映射到正矩形的四個頂點。

透視變換( Perspective Transformation )是將圖片投影到一個新的視平面( Viewing Plane ),也稱作投影映射( Projective Mapping )。

計算過程:

以上兩種方法都可以用來摳取旋轉矩形的內容。仿射變換方法需要預先對整張圖進行旋轉,通過觀察旋轉后的圖像可以發(fā)現(xiàn),有一部分圖像被旋轉出了圖像邊界,如果你要摳取的目標正好在圖像邊緣附近,那么很容易出界導致圖像摳取的缺失。同時我們需要對寬、高和角度做出動態(tài)的調整;透視變換的方法直接對摳取區(qū)域進行了映射,這種方法可以省略旋轉的步驟,并且不會出現(xiàn)摳取內容的缺失。同時我們只需要對4個頂點之間的映射關系做好定義即可,不需要考慮角度的問題。相對的,透視變換相對于仿射變換計算量更大一些,不過這在 c++ 的底層實現(xiàn)上帶來的時延差距小于 ms 。

python 圖像旋轉怎么去除黑邊

去除黑邊現(xiàn)象的辦法:

1)在做圖像坐標映射反查的時候,算出當前點在原始圖像的外部還是內部,若在外部,判斷當前像素點的X或者Y位置,找臨近四個邊界的像

素值代替;

該方法太過繁瑣,適合自己寫程序實現(xiàn),如若想調用現(xiàn)有的一些庫函數,可以考慮2)做法:

2)將待旋轉的圖像進行邊界填充,最不濟的情況下可以擴充為原始圖像的大??;

旋轉邊界填充圖像;

計算原始圖像經過旋轉以后的結果圖像的尺寸大??;

在邊界填充旋轉圖像上截取目標圖像;(圖像都是按照圖像中心旋轉的);

附上一段matlab人臉根據人眼位置對齊的代碼:

[plain] view plain copy

eye_angle = atan2( (eye_pts(2,2) - eye_pts(1,2)),(eye_pts(2,1) - eye_pts(1,1) ) ) * 180 / pi; % 人眼的傾斜角度

if eye_angle 0

eye_angle = eye_angle + 360;

end

if floor(eye_angle) = 5 || floor( 360 - eye_angle ) = 5

continue;

end % 5度之內不做對齊操作

img = imread(img_path);

[m,n,~] = size(img);

img_pad = padarray(img,[m n],'both','replicate');% 擴充圖像

img_pad_rotate = imrotate(img_pad,eye_angle,'bilinear'); % 旋轉擴充圖像

[m_pad_r,n_pad_r,~] = size(img_pad_rotate);

[plain] view plain copy

eye_angle = eye_angle * pi / 180;

f_cos = cos(eye_angle);f_sin = sin(eye_angle);

new_m = floor(m * abs(f_cos) + n * abs(f_sin));

new_n = floor(n * abs(f_sin) + m * abs(f_cos));% 最終對齊圖像的大小

left = floor((n_pad_r - new_n) / 2);right = left + new_n;

bott = floor((m_pad_r - new_m) / 2);up = bott + new_m;

face_rorate = img_pad_rotate(bott : up,left : right,:); % 截取目標圖像

figure,imshow(face_rorate)

python:PIL圖像處理

PIL (Python Imaging Library)

Python圖像處理庫,該庫支持多種文件格式,提供強大的圖像處理功能。

PIL中最重要的類是Image類,該類在Image模塊中定義。

從文件加載圖像:

如果成功,這個函數返回一個Image對象?,F(xiàn)在你可以使用該對象的屬性來探索文件的內容。

format 屬性指定了圖像文件的格式,如果圖像不是從文件中加載的則為 None 。

size 屬性是一個2個元素的元組,包含圖像寬度和高度(像素)。

mode 屬性定義了像素格式,常用的像素格式為:“L” (luminance) - 灰度圖, “RGB” , “CMYK”。

如果文件打開失敗, 將拋出IOError異常。

一旦你擁有一個Image類的實例,你就可以用該類定義的方法操作圖像。比如:顯示

( show() 的標準實現(xiàn)不是很有效率,因為它將圖像保存到一個臨時文件,然后調用外部工具(比如系統(tǒng)的默認圖片查看軟件)顯示圖像。該函數將是一個非常方便的調試和測試工具。)

接下來的部分展示了該庫提供的不同功能。

PIL支持多種圖像格式。從磁盤中讀取文件,只需使用 Image 模塊中的 open 函數。不需要提供文件的圖像格式。PIL庫將根據文件內容自動檢測。

如果要保存到文件,使用 Image 模塊中的 save 函數。當保存文件時,文件名很重要,除非指定格式,否則PIL庫將根據文件的擴展名來決定使用哪種格式保存。

** 轉換文件到JPEG **

save 函數的第二個參數可以指定使用的文件格式。如果文件名中使用了一個非標準的擴展名,則必須通過第二個參數來指定文件格式。

** 創(chuàng)建JPEG縮略圖 **

需要注意的是,PIL只有在需要的時候才加載像素數據。當你打開一個文件時,PIL只是讀取文件頭獲得文件格式、圖像模式、圖像大小等屬性,而像素數據只有在需要的時候才會加載。

這意味著打開一個圖像文件是一個非??斓牟僮?,不會受文件大小和壓縮算法類型的影響。

** 獲得圖像信息 **

Image 類提供了某些方法,可以操作圖像的子區(qū)域。提取圖像的某個子區(qū)域,使用 crop() 函數。

** 復制圖像的子區(qū)域 **

定義區(qū)域使用一個包含4個元素的元組,(left, upper, right, lower)。坐標原點位于左上角。上面的例子提取的子區(qū)域包含300x300個像素。

該區(qū)域可以做接下來的處理然后再粘貼回去。

** 處理子區(qū)域然后粘貼回去 **

當往回粘貼時,區(qū)域的大小必須和參數匹配。另外區(qū)域不能超出圖像的邊界。然而原圖像和區(qū)域的顏色模式無需匹配。區(qū)域會自動轉換。

** 滾動圖像 **

paste() 函數有個可選參數,接受一個掩碼圖像。掩碼中255表示指定位置為不透明,0表示粘貼的圖像完全透明,中間的值表示不同級別的透明度。

PIL允許分別操作多通道圖像的每個通道,比如RGB圖像。 split() 函數創(chuàng)建一個圖像集合,每個圖像包含一個通道。 merge() 函數接受一個顏色模式和一個圖像元組,然后將它們合并為一個新的圖像。接下來的例子交換了一個RGB圖像的三個通道。

** 分離和合并圖像通道 **

對于單通道圖像, split() 函數返回圖像本身。如果想處理各個顏色通道,你可能需要先將圖像轉為RGB模式。

resize() 函數接受一個元組,指定圖像的新大小。

rotate() 函數接受一個角度值,逆時針旋轉。

** 基本幾何變換 **

圖像旋轉90度也可以使用 transpose() 函數。 transpose() 函數也可以水平或垂直翻轉圖像。

** transpose **

transpose() 和 rotate() 函數在性能和結果上沒有區(qū)別。

更通用的圖像變換函數為 transform() 。

PIL可以轉換圖像的像素模式。

** 轉換顏色模式 **

PIL庫支持從其他模式轉為“L”或“RGB”模式,其他模式之間轉換,則需要使用一個中間圖像,通常是“RGB”圖像。

ImageFilter 模塊包含多個預定義的圖像增強過濾器用于 filter() 函數。

** 應用過濾器 **

point() 函數用于操作圖像的像素值。該函數通常需要傳入一個函數對象,用于操作圖像的每個像素:

** 應用點操作 **

使用以上技術可以快速地對圖像像素應用任何簡單的表達式??梢越Y合 point() 函數和 paste 函數修改圖像。

** 處理圖像的各個通道 **

注意用于創(chuàng)建掩碼圖像的語法:

Python計算邏輯表達式采用短路方式,即:如果and運算符左側為false,就不再計算and右側的表達式,而且返回結果是表達式的結果。比如 a and b 如果a為false則返回a,如果a為true則返回b,詳見Python語法。

對于更多高級的圖像增強功能,可以使用 ImageEnhance 模塊中的類。

可以調整圖像對比度、亮度、色彩平衡、銳度等。

** 增強圖像 **

PIL庫包含對圖像序列(動畫格式)的基本支持。支持的序列格式包括 FLI/FLC 、 GIF 和一些實驗性的格式。 TIFF 文件也可以包含多個幀。

當打開一個序列文件時,PIL庫自動加載第一幀。你可以使用 seek() 函數 tell() 函數在不同幀之間移動。

** 讀取序列 **

如例子中展示的,當序列到達結尾時,將拋出EOFError異常。

注意當前版本的庫中多數底層驅動只允許seek到下一幀。如果想回到前面的幀,只能重新打開圖像。

以下迭代器類允許在for語句中循環(huán)遍歷序列:

** 一個序列迭代器類 **

PIL庫包含一些函數用于將圖像、文本打印到Postscript打印機。以下是一個簡單的例子。

** 打印到Postscript **

如前所述,可以使用 open() 函數打開圖像文件,通常傳入一個文件名作為參數:

如果打開成功,返回一個Image對象,否則拋出IOError異常。

也可以使用一個file-like object代替文件名(暫可以理解為文件句柄)。該對象必須實現(xiàn)read,seek,tell函數,必須以二進制模式打開。

** 從文件句柄打開圖像 **

如果從字符串數據中讀取圖像,使用StringIO類:

** 從字符串中讀取 **

如果圖像文件內嵌在一個大文件里,比如 tar 文件中??梢允褂肅ontainerIO或TarIO模塊來訪問。

** 從tar文檔中讀取 **

** 該小節(jié)不太理解,請參考原文 **

有些解碼器允許當讀取文件時操作圖像。通常用于在創(chuàng)建縮略圖時加速解碼(當速度比質量重要時)和輸出一個灰度圖到激光打印機時。

draft() 函數。

** Reading in draft mode **

輸出類似以下內容:

注意結果圖像可能不會和請求的模式和大小匹配。如果要確保圖像不大于指定的大小,請使用 thumbnail 函數。

Python2.7 教程 PIL

Python 之 使用 PIL 庫做圖像處理

來自


分享標題:python圖形旋轉函數 python繪制3d可旋轉圖形
分享路徑:http://fisionsoft.com.cn/article/dodecdd.html