您好,登錄后才能下訂單哦!
怎么在python項目中利用opencv實現一個圖像修復功能?相信很多沒有經驗的人對此束手無策,為此本文總結了問題出現的原因和解決方法,通過這篇文章希望你能解決這個問題。
cv2.inpaint()
cv2.INPAINT_TELEA
cv2.INPAINT_NS
import numpy as np import cv2 as cv img = cv.imread('messi_2.jpg') mask = cv.imread('mask2.png',0) dst = cv.inpaint(img,mask,3,cv.INPAINT_TELEA) cv.imshow('dst',dst) cv.waitKey(0) cv.destroyAllWindows()
擴展:圖像金字塔
通常,我們曾經使用恒定大小的圖像.但在某些情況下,我們需要使用不同分辨率的(相同)圖像.例如,在搜索圖像中的某些內容時,如臉部,我們不確定該對象在所述圖像中的大小.
具有不同分辨率的圖像被稱為圖像金字塔(因為當它們保持在堆疊中,底部具有最高分辨率圖像而頂部具有最低分辨率圖像時,它看起來像金字塔).
圖像金字塔有兩種:
高斯金字塔和
拉普拉斯金字塔
高斯金字塔的頂部是通過將底部圖像中的連續的行和列去除得到的.頂部圖像中的每個像素值等于下一層圖像中 5 個像素的高斯加權平均值.這樣操作一次一個 MxN 的圖像就變成了一個 M/2xN/2 的圖像。所以這幅圖像的面積就變為原來圖像面積的四分之一.這被稱為an Octave(一個八度)。連續進行這樣的操作就會得到一個分辨率不斷下降的圖像金字塔.
函數cv2.pyrDown()從一個高分辨率大尺寸的圖像向上構建一個金子塔 (尺寸變小,分辨率降低).
代碼:
import cv2 img = cv2.imread('img.jpg') lower_reso = cv2.pyrDown(img) cv2.imshow('src',img) cv2.imshow('HigherReso',lower_reso) cv2.waitKey()
繼續使用函數cv2.pyrUp()從一個低分辨率小尺寸的圖像向下構建一個金子塔(尺寸變大,但分辨率不會增加)
代碼:
import cv2 img = cv2.imread('img.jpg') lower_reso = cv2.pyrDown(img) higher_reso2 = cv2.pyrUp(lower_reso) cv2.imshow('show',higher_reso2) cv2.waitKey()
NOTE:
當用 cv2.pyrDown(),圖像的分辨率就會降低,信息就會被丟失.如果先cv2.pyrDown()產生的中間圖像再使用函數cv2.pyrUp()得到圖像,與原圖像相比分辨率差了很多.
可以修改代碼:
import cv2 img = cv2.imread('img.jpg') higher_reso2 = cv2.pyrUp(img) lower_reso = cv2.pyrDown(higher_reso2) cv2.imshow('show',lower_reso) cv2.waitKey()
拉普拉斯金字塔由高斯金字塔形成,大部分元素都是零,用于圖像壓縮.
代碼:
import cv2 img = cv2.imread('img.jpg') img = cv2.Canny(img, 100, 200) higher_reso2 = cv2.pyrUp(img) lower_reso = cv2.pyrDown(higher_reso2) cv2.imshow('src',img) cv2.imshow('higher_reso2',higher_reso2) cv2.imshow('lower_reso',lower_reso) cv2.waitKey()
看完上述內容,你們掌握怎么在python項目中利用opencv實現一個圖像修復功能的方法了嗎?如果還想學到更多技能或想了解更多相關內容,歡迎關注億速云行業資訊頻道,感謝各位的閱讀!
免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。