該系列文章是講解Python OpenCV圖像處理知識,前期主要講解圖像入門、OpenCV基礎用法,中期講解圖像處理的各類算法,包括圖像銳化算子、圖像加強技術、圖像分割等,後期結合深度學習研究圖像識別、圖像分類應用。但願文章對您有所幫助,若是有不足之處,還請海涵~html
該系列在github全部源代碼:https://github.com/eastmountyxz/ImageProcessing-Python
PS:請求幫忙點個Star,哈哈,第一次使用Github,之後會分享更多代碼,一塊兒加油。python
同時推薦做者的C++圖像系列知識:
[數字圖像處理] 一.MFC詳解顯示BMP格式圖片
[數字圖像處理] 二.MFC單文檔分割窗口顯示圖片
[數字圖像處理] 三.MFC實現圖像灰度、採樣和量化功能詳解
[數字圖像處理] 四.MFC對話框繪製灰度直方圖
[數字圖像處理] 五.MFC圖像點運算之灰度線性變化、灰度非線性變化、閾值化和均衡化處理詳解
[數字圖像處理] 六.MFC空間幾何變換之圖像平移、鏡像、旋轉、縮放詳解
[數字圖像處理] 七.MFC圖像加強之圖像普通平滑、高斯平滑、Laplacian、Sobel、Prewitt銳化詳解git
前文參考:
[Python圖像處理] 一.圖像處理基礎知識及OpenCV入門函數
[Python圖像處理] 二.OpenCV+Numpy庫讀取與修改像素
[Python圖像處理] 三.獲取圖像屬性、興趣ROI區域及通道處理
[Python圖像處理] 四.圖像平滑之均值濾波、方框濾波、高斯濾波及中值濾波
[Python圖像處理] 五.圖像融合、加法運算及圖像類型轉換github
本篇文章主要講解Python調用OpenCV實現圖像位移操做、旋轉和翻轉效果,包括四部分知識:圖像縮放、圖像旋轉、圖像翻轉、圖像平移。全文均是基礎知識,但願對您有所幫助。
1.圖像縮放
2.圖像旋轉
3.圖像翻轉
4.圖像平移web
PS:文章參考本身之前系列圖像處理文章及OpenCV庫函數,同時部分參考網易雲視頻,推薦你們去學習。同時,本篇文章涉及到《計算機圖形學》基礎知識,請你們下來補充。
推薦原理文章:OpenCV2:圖像的幾何變換,平移、鏡像、縮放、旋轉面試
投票閒談:
最後但願你們幫我2019年CSDN博客之星投投票,天天能夠投5票喔,截止時間2020年2月19日,謝謝你們!八年,在CSDN分享了410篇文章,15個專欄,400多萬人次瀏覽,包括Python人工智能、數據挖掘、網絡爬蟲、圖象處理、網絡安全、JAVA網站、Android開發、LAMP/WAMP、C#網絡編程、C++遊戲、算法和數據結構、面試總結、人生感悟等。固然還有我和你的故事,感恩一路有你,感謝一路同行,但願經過編程分享幫助到更多人,也但願學成以後回貴州教更多學生。由於喜歡,因此分享,且看且珍惜,加油!等我四年學成歸來~算法
圖像縮放主要調用resize()函數實現,具體以下:
result = cv2.resize(src, dsize[, result[. fx[, fy[, interpolation]]]])
其中src表示原始圖像,dsize表示縮放大小,fx和fy也能夠表示縮放大小倍數,他們兩個(dsize或fx\fy)設置一個便可實現圖像縮放。例如:安全
圖像縮放:設(x0, y0)是縮放後的座標,(x, y)是縮放前的座標,sx、sy爲縮放因子,則公式以下:
網絡
代碼示例以下所示:
#encoding:utf-8 import cv2 import numpy as np #讀取圖片 src = cv2.imread('test.jpg') #圖像縮放 result = cv2.resize(src, (200,100)) print result.shape #顯示圖像 cv2.imshow("src", src) cv2.imshow("result", result) #等待顯示 cv2.waitKey(0) cv2.destroyAllWindows()
輸出結果以下圖所示,圖像縮小爲(200,100)像素。
須要注意的是,代碼中 cv2.resize(src, (200,100)) 設置的dsize是列數爲200,行數爲100。
一樣,能夠獲取原始圖像像素再乘以縮放係數進行圖像變換,代碼以下所示。
#encoding:utf-8 import cv2 import numpy as np #讀取圖片 src = cv2.imread('test.jpg') rows, cols = src.shape[:2] print rows, cols #圖像縮放 dsize(列,行) result = cv2.resize(src, (int(cols*0.6), int(rows*1.2))) #顯示圖像 cv2.imshow("src", src) cv2.imshow("result", result) #等待顯示 cv2.waitKey(0) cv2.destroyAllWindows()
輸出結果以下圖所示:
最後講解(fx,fy)縮放倍數的方法對圖像進行放大或縮小。
#encoding:utf-8 import cv2 import numpy as np #讀取圖片 src = cv2.imread('test.jpg') rows, cols = src.shape[:2] print rows, cols #圖像縮放 result = cv2.resize(src, None, fx=0.3, fy=0.3) #顯示圖像 cv2.imshow("src", src) cv2.imshow("result", result) #等待顯示 cv2.waitKey(0) cv2.destroyAllWindows()
最後輸出的結果以下圖所示,這是按例比0.3*0.3縮小的。
圖像旋轉主要調用getRotationMatrix2D()函數和warpAffine()函數實現,繞圖像的中心旋轉,具體以下:
圖像旋轉:設(x0, y0)是旋轉後的座標,(x, y)是旋轉前的座標,(m,n)是旋轉中心,a是旋轉的角度,(left,top)是旋轉後圖像的左上角座標,則公式以下:
代碼以下所示:
#encoding:utf-8 import cv2 import numpy as np #讀取圖片 src = cv2.imread('test.jpg') #原圖的高、寬 以及通道數 rows, cols, channel = src.shape #繞圖像的中心旋轉 #參數:旋轉中心 旋轉度數 scale M = cv2.getRotationMatrix2D((cols/2, rows/2), 30, 1) #參數:原始圖像 旋轉參數 元素圖像寬高 rotated = cv2.warpAffine(src, M, (cols, rows)) #顯示圖像 cv2.imshow("src", src) cv2.imshow("rotated", rotated) #等待顯示 cv2.waitKey(0) cv2.destroyAllWindows()
輸出結果以下圖所示:
若是設置-90度,則核心代碼和圖像以下所示。
M = cv2.getRotationMatrix2D((cols/2, rows/2), -90, 1)
rotated = cv2.warpAffine(src, M, (cols, rows))
圖像翻轉在OpenCV中調用函數flip()實現,原型以下:
dst = cv2.flip(src, flipCode)
其中src表示原始圖像,flipCode表示翻轉方向,若是flipCode爲0,則以X軸爲對稱軸翻轉,若是fliipCode>0則以Y軸爲對稱軸翻轉,若是flipCode<0則在X軸、Y軸方向同時翻轉。
代碼以下所示:
#encoding:utf-8 import cv2 import numpy as np import matplotlib.pyplot as plt #讀取圖片 img = cv2.imread('test.jpg') src = cv2.cvtColor(img,cv2.COLOR_BGR2RGB) #圖像翻轉 #0以X軸爲對稱軸翻轉 >0以Y軸爲對稱軸翻轉 <0X軸Y軸翻轉 img1 = cv2.flip(src, 0) img2 = cv2.flip(src, 1) img3 = cv2.flip(src, -1) #顯示圖形 titles = ['Source', 'Image1', 'Image2', 'Image3'] images = [src, img1, img2, img3] for i in xrange(4): plt.subplot(2,2,i+1), plt.imshow(images[i], 'gray') plt.title(titles[i]) plt.xticks([]),plt.yticks([]) plt.show()
輸出結果以下圖所示:
圖像平移:設(x0, y0)是縮放後的座標,(x, y)是縮放前的座標,dx、dy爲偏移量,則公式以下:
圖像平移首先定義平移矩陣M,再調用warpAffine()函數實現平移,核心函數以下:
M = np.float32([[1, 0, x], [0, 1, y]])
shifted = cv2.warpAffine(image, M, (image.shape[1], image.shape[0]))
完整代碼以下所示:
#encoding:utf-8 import cv2 import numpy as np import matplotlib.pyplot as plt #讀取圖片 img = cv2.imread('test.jpg') image = cv2.cvtColor(img,cv2.COLOR_BGR2RGB) #圖像平移 下、上、右、左平移 M = np.float32([[1, 0, 0], [0, 1, 100]]) img1 = cv2.warpAffine(image, M, (image.shape[1], image.shape[0])) M = np.float32([[1, 0, 0], [0, 1, -100]]) img2 = cv2.warpAffine(image, M, (image.shape[1], image.shape[0])) M = np.float32([[1, 0, 100], [0, 1, 0]]) img3 = cv2.warpAffine(image, M, (image.shape[1], image.shape[0])) M = np.float32([[1, 0, -100], [0, 1, 0]]) img4 = cv2.warpAffine(image, M, (image.shape[1], image.shape[0])) #顯示圖形 titles = [ 'Image1', 'Image2', 'Image3', 'Image4'] images = [img1, img2, img3, img4] for i in xrange(4): plt.subplot(2,2,i+1), plt.imshow(images[i], 'gray') plt.title(titles[i]) plt.xticks([]),plt.yticks([]) plt.show()
輸出結果以下圖所示:
三尺講臺,三寸舌, 三千桃李,三杆筆。 再累再苦,站在講臺前就是最美的本身,幾個月的煩惱和憂愁都已消失,真的好享受這種狀態,彷彿散着光芒,終於給低年級的同窗上課了越早培養編程興趣越好,恨不能傾囊相授。 即便當一生的教書匠,平平淡淡也喜歡,並且總感受給學生講課遠不是課酬和職稱所能比擬,這就是所謂的事業,所謂的愛好。 但願文章對你們有所幫助,若是有錯誤或不足之處,還請海涵。 準備出去休回家了,好好享受最美時光。 (By:Eastmount 2018-09-06 早10點 https://blog.csdn.net/Eastmount/)