當前位置:
首頁 > 最新 > OpenCV3圖像操作

OpenCV3圖像操作

今天看看OpenCV3如何對圖像進行操作,圖像操作主要只對圖像進行的各種坐標變換,主要有尺度變換,旋轉變換,平移變換以及偏移變換(水平或垂直),這些變換都是針對圖像的坐標進行的,而不是圖像的像素,可被統稱為仿射變換,下面就來看看使用OpenCV如何實現這些變換。下圖是岡薩雷斯的《數字圖像處理》中對幾種變換的說明,作者設圖像上一個點表示為(x,y,灰度值),與變換矩陣相乘就會得到(新x,新y,不變的灰度值),所以,對於仿射變換,實際上我們僅需要2X3的矩陣即可,我們不會改變圖像的灰度值。

OpenCV提供了resize方法,用來對圖像進行比例放大或縮小,代碼如下:

使用resize可以對圖像進行尺度變換,如果進行放大,由於圖像的像素增加,需要對增加的像素指定插值方式,這裡使用了線性插值(cv2.INTER_LINEAR)。之後我們使用matplotlib進行了繪圖:

可以看到,縮小後的圖像由於像素丟失,放大到與原圖像同樣大小時,圖像出現了一些失真,而放大的圖像,使用線性插值後,插入像素值是用其鄰點像素值進行估計得到的,所以變相起到了平滑的效果。

OpenCV提供了warpAffine方法進行各種仿射變換,傳遞一個2X3的矩陣給該函數,可以對感興趣區域進行對應的變換,下面看例子。

讀取原圖像後首先進行了平移變換,Python的OpenCV需要藉助numpy模塊,我們使用numpy創建了一個2X3的二位數組:

[[1,0,20],

[0,1,20]]

這會將原圖像沿x和y方向分別平移20個像素。接下來的旋轉和偏移也是同樣的原理,只是構造的矩陣有所差別,旋轉的比較特殊,為了避免自己計算旋轉矩陣中的三角函數值,我們可以使用getRotationMatrix2D方法進行構造。如果去看看cv2模塊的介面,我們還能看到一個getAffineTransform方法,使用該方法我們可以使用三個點定製自己的仿射變換矩陣。

上面代碼運行結果如下圖所示。

喜歡這篇文章嗎?立刻分享出去讓更多人知道吧!

本站內容充實豐富,博大精深,小編精選每日熱門資訊,隨時更新,點擊「搶先收到最新資訊」瀏覽吧!


請您繼續閱讀更多來自 程序猿武道館 的精彩文章:

TAG:程序猿武道館 |