精品国产人成在线_亚洲高清无码在线观看_国产在线视频国产永久2021_国产AV综合第一页一个的一区免费影院黑人_最近中文字幕MV高清在线视频

0
  • 聊天消息
  • 系統消息
  • 評論與回復
登錄后你可以
  • 下載海量資料
  • 學習在線課程
  • 觀看技術視頻
  • 寫文章/發帖/加入社區
會員中心
創作中心

完善資料讓更多小伙伴認識你,還能領取20積分哦,立即完善>

3天內不再提示

OpenCV入門之OpenCV的基本操作3

jf_78858299 ? 來源:DL INtoOUT ? 作者:AN ? 2023-02-07 14:33 ? 次閱讀

6、圖像的縮放、翻轉、旋轉、平移、透視

7、卷積操作:均值濾波、方盒濾波、高斯濾波、中值濾波、雙邊濾波

8、算子操作:sobel算子、scharr算子、拉普拉斯算子、Canny邊緣檢測

9、形態學操作:腐蝕、膨脹、開運算、閉運算、頂帽、黑帽


6、圖像的縮放、翻轉、旋轉、平移、透視

OpenCV提供了一系列的api,cv.flip、cv.rotate、cv.resize、cv.warpAffine和cv.warpPerspective等,具體算法實現可查看OpenCV的源碼。原理簡單來說就是要找到像素變換前與變換后的位置坐標對應關系。

平移是物體位置的移動。如果知道在(x,y)方向上的位移,則將其設為(tx, ty),可以創建轉換矩陣M,如下所示

圖片

圖像旋轉角度為θ是通過以下形式的變換矩陣實現的:

圖片

注:證明如下

圖片

OpenCV提供了可縮放的旋轉以及可調整的旋轉中心,因此可以在任何位置旋轉。修改后的變換矩陣為:

圖片

其中

圖片

可以通過cv2.getRotationMatrix2D來獲得旋轉矩陣,不需要手算。

對于透視變換,需要在輸入圖像上有4個點,在輸出圖像上需要相應的點。在這四個點中,其中三個不應共線。然后可以通過函數cv.getPerspectiveTransform找到變換矩陣。

def AffineTrans():
    img = cv2.imread('./images/test.jpg')
    # 圖像變換尺寸
    # fx軸和fy軸的縮放比例,interpolation插值方式,cv2.INTER_LINEAR  #默認效果
    # cv2.INTER_NEAREST,cv2.INTER_AREA,cv2.INTER_CUBIC
    img_resize = cv2.resize(img,None,fx=0.5,fy=0.5,interpolation=cv2.INTER_AREA)


    # 圖像翻轉,flipCode=0:上下翻轉,大于0左右翻轉,小于0:上下加左右
    img_flip = cv2.flip(img,flipCode=1)
    # 圖像旋轉
    img_rotate = cv2.rotate(img,rotateCode=cv2.ROTATE_90_CLOCKWISE)


    h,w,c = img.shape
    # 圖像平移
    # cv2.warpAffine(src,變換矩陣,輸出圖像大小,)
    # 變換矩陣,向右移動100個像素,向下移動100個像素
    M = np.float32([[1,0,100],
                    [0,1,100]])
    img_warp = cv2.warpAffine(img,M,dsize=(200,500))


    # 獲得變換矩陣,(中心點,按逆時針旋轉,scal:縮放比例)
    M_r = cv2.getRotationMatrix2D((300,250),15,1)
    img_rotate_ = cv2.warpAffine(img,M_r,(w,h))


    # 通過三個點確定旋轉
    # 需要原圖三個點和變換后的三個點對應的坐標
    src = np.float32([[100,200],[300,200],[200,400]])
    dst = np.float32([[200,300],[300,400],[300,500]])
    M1 = cv2.getAffineTransform(src,dst)
    img_r3 = cv2.warpAffine(img,M1,(w,h))


    # 透視變換
    src_p = np.float32([[100,100],[700,100],[100,300],[700,300]])
    dst_p = np.float32([[0,0],[720,0],[0,320],[720,320]])
    M_p = cv2.getPerspectiveTransform(src_p,dst_p)
    img_perspect = cv2.warpPerspective(img,M_p,(w,h))


    cv2.imshow("imshow", img_r3)
    cv2.waitKey(0)
    cv2.destroyAllWindows()

7、卷積操作:均值濾波、方盒濾波、高斯濾波、中值濾波、雙邊濾波

圖像濾波,就是在盡量保留圖像細節特征的條件下對目標圖像的噪聲進行抑制,可以把濾波器想象成一個包含加權系數的窗口,當使用這個濾波器平滑處理圖像時,就把這個窗口放到圖像之上,透過這個窗口來看我們得到的圖像。

而對濾波處理的要求有兩個,一是不能損壞圖像的輪廓及邊緣等重要信息;二是使圖像清晰視覺效果好。

神經網絡中的話來說就是用不同的卷積核對圖像進行卷積操作,以產生不同的效果。不同的是神經網絡中的卷積核通過訓練得到,而圖像濾波是用已知的卷積核對圖像進行卷積。

方盒濾波、均值濾波和中值濾波都可以起到平滑圖像,濾去噪聲的功能。 均值濾波采用線性的方法,平均整個窗口范圍內的像素值 ,均值濾波本身存在著固有的缺陷,即它不能很好地保護圖像細節,在圖像去噪的同時也破壞了圖像的細節部分,從而使圖像變得模糊,不能很好地去除噪聲點。

均值濾波對高斯噪聲表現較好,對椒鹽噪聲表現較差 。中值濾波采用非線性的方法,它在平滑脈沖噪聲方面非常有效,同時它可以保護圖像尖銳的邊緣,選擇適當的點來替代污染點的值,所以處理效果好,對椒鹽噪聲表現較好,對高斯噪聲表現較差。

假設:一個5*5的卷積核,均值濾波則為:

圖片

中值濾波是選取圖像中窗口大小范圍內的像素點,將這些像素值排序,然后將位于中間位置的像素值作為當前像素點的像素值,讓周圍的像素值接近真實值,從而消除孤立的噪聲點。假設3x3的串口大小,像素排序后為[1,2,5,5,6,7,8,9,11],取其中的中間值6作為卷積后的結果值。

注1:方盒濾波是OpenCV中提供的一個API

方盒濾波卷積核:

圖片

參數a的作用:normalize = true, a = 1/W * H 此時為均值濾波

normalize = false, a=1 此時不進行均值化,輸出的結果為25個元素之和。當normalize = true時,方盒濾波 ==平均濾波,一般情況下都使用均值濾波,所以在使用時直接調用均值濾波API

注2:高斯噪聲和椒鹽噪聲

高斯噪聲,顧名思義是指服從高斯分布(正態分布)的一類噪聲,通常是因為不良照明和高溫引起的傳感器噪聲。

椒鹽噪聲,通常是由圖像傳感器,傳輸信道,解壓處理等產生的黑白相間的亮暗點噪聲(椒-黑,鹽-白)。

高斯濾波就是將為正態分布(“高斯分布”)的卷積核對圖像進行卷積操作。

要產生一個高斯濾波模板,以模板的中心位置為坐標原點進行取樣。模板在各個位置的坐標,如下圖所示(x軸水平向右,y軸豎直向下),用數值代替上面(x, y),假定中心點的坐標為(0, 0),那么距離它周圍的八個點的坐標如下:

圖片

更遠的點,依次類推,為了計算權重矩陣,需要設定σ的值,假定σ=1.5,則模糊半徑為1的權重矩陣如下:

圖片

這九個點的權重綜合等于 0.4787147,如果只計算這 9 個點的加權平均,還必須讓他們的權重之和等于1,因此上面的九個值還要分別除以 0.4787147,得到最終的權重矩陣:

圖片

卷積后,中心點的值不一定最大,但是其比重是最大的,兩邊的值可能比較大,但是其比重較小。中心點的值與周圍的加權平均了所以圖像變模糊了。

雙邊濾波結合圖像的空間鄰近度和像素值相似度的一種折中處理,同時考慮空域信息和灰度相似性,可以保留邊緣,同時可以對邊緣內的區域進行平滑處理 。雙邊濾波器顧名思義比高斯濾波多了一個高斯方差sigma-d,它是基于空間分布的高斯濾波函數,所以在邊緣附近,離的較遠的像素不會太多影響到邊緣上的像素值,這樣就保證了邊緣附近像素值的保存。但是由于保存了過多的高頻信息,對于彩色圖像里的高頻噪聲,雙邊濾波器不能夠干凈的濾掉,只能夠對于低頻信息進行較好的濾波。

公式中可以看到,因為邊緣附近的灰度值差比較大,所以如果遇到邊緣附近,灰度信息的權重比較大,所以中心點權重比較大,保留了邊緣信息。

def Convolution():
    img = cv2.imread('./images/test.jpg')
    # 卷積核測試
    kernel_blur = np.ones([3,3],np.float32)/9
    kernel1 = np.array([[-1,-1,-1],[-1,8,-1],[-1,-1,-1]])
    kernel2 = np.array([[-2,1,0],[-1,1,1],[0,1,2]])
    kernel3 = np.array([[0,-1,0],[-1,5,-1],[0,-1,0]])
    new_img = cv2.filter2D(img,-1,kernel3)
    # 方盒濾波、均值濾波
    img_box = cv2.boxFilter(img,-1,(5,5),normalize=True)
    img_blur = cv2.blur(img,(5,5))


    # 高斯濾波 sigma越大越模糊標準差越大,ksize越大越模糊,適合雪花點
    img_gauss = cv2.GaussianBlur(img,ksize=(3,3),sigmaX=5)


    # 中值濾波,適合椒鹽噪聲
    img_median = cv2.medianBlur(img,ksize=3)


    # 雙邊濾波,灰度值兩邊進行高斯模糊嗎,即保留邊緣信息進行局部優化
    # sigmaColor:計算像素信息的sigma,sigmaSpace計算空間信息的sigma
    img_bilateral = cv2.bilateralFilter(img,d=7,sigmaColor=10,sigmaSpace=20)


    cv2.imshow("imshow", img_bilateral)
    cv2.waitKey(0)
    cv2.destroyAllWindows()
聲明:本文內容及配圖由入駐作者撰寫或者入駐合作網站授權轉載。文章觀點僅代表作者本人,不代表電子發燒友網立場。文章及其配圖僅供工程師學習之用,如有內容侵權或者其他違規問題,請聯系本站處理。 舉報投訴
  • 圖像處理
    +關注

    關注

    27

    文章

    1282

    瀏覽量

    56638
  • 開源
    +關注

    關注

    3

    文章

    3249

    瀏覽量

    42402
  • 計算機視覺
    +關注

    關注

    8

    文章

    1696

    瀏覽量

    45927
  • OpenCV
    +關注

    關注

    30

    文章

    628

    瀏覽量

    41263
收藏 人收藏

    評論

    相關推薦

    基本閾值操作_《OpenCV3編程入門》書本配套源代碼

    OpenCV3編程入門》書本配套源代碼:基本閾值操作
    發表于 06-06 15:39 ?8次下載

    基本鼠標操作_《OpenCV3編程入門》書本配套源代碼

    OpenCV3編程入門》書本配套源代碼:基本鼠標操作
    發表于 06-06 15:39 ?5次下載

    OpenCV進行基本繪圖_《OpenCV3編程入門》書本配套源

    OpenCV3編程入門》書本配套源代碼:用OpenCV進行基本繪圖
    發表于 05-11 16:46 ?36次下載

    支持向量機SVM引導_《OpenCV3編程入門》書本配套源代碼

    OpenCV3編程入門》書本配套源代碼:支持向量機SVM引導
    發表于 06-06 15:52 ?2次下載

    OpenCV3編程入門-源碼例程全集-OpenCV開發環境的配置

    OpenCV3編程入門-源碼例程全集-OpenCV開發環境的配置,感興趣的小伙伴們可以瞧一瞧。
    發表于 09-18 16:27 ?20次下載

    OpenCV3編程入門-源碼例程全集-點追蹤

    OpenCV3編程入門-源碼例程全集-點追蹤
    發表于 09-18 16:38 ?0次下載

    OpenCV3編程入門-源碼例程全集-播放視頻

    OpenCV3編程入門-源碼例程全集-播放視頻
    發表于 09-17 22:54 ?18次下載

    OpenCV3編程入門-源碼例程全集-人臉識別

    OpenCV3編程入門-源碼例程全集-人臉識別
    發表于 09-17 22:55 ?2次下載

    OpenCV3編程入門-源碼例程全集-模板匹配

    OpenCV3編程入門-源碼例程全集-模板匹配
    發表于 09-17 22:55 ?4次下載

    OpenCV3編程入門-源碼例程全集-基本閾值操作

    OpenCV3編程入門-源碼例程全集-基本閾值操作,感興趣的小伙伴們可以瞧一瞧。
    發表于 09-18 16:55 ?0次下載

    OpenCV3編程入門-源碼例程全集-基本鼠標操作

    OpenCV3編程入門-源碼例程全集-基本鼠標操作,感興趣的小伙伴們可以瞧一瞧。
    發表于 09-18 16:55 ?0次下載

    支持向量機SVM引導_OpenCV3編程入門-源碼例程

    OpenCV3編程入門-源碼例程全集-支持向量機SVM引導,感興趣的小伙伴們可以瞧一瞧。
    發表于 09-18 17:02 ?1次下載

    OpenCV進行基本繪圖_OpenCV3編程入門-源碼例程

    OpenCV3編程入門-源碼例程全集-用OpenCV進行基本繪圖,感興趣的小伙伴們可以瞧一瞧。
    發表于 09-18 17:02 ?3次下載

    OpenCV入門OpenCV的基本操作2

    OpenCV是一個基于Apache2.0許可(開源)發行的跨平臺計算機視覺和機器學習軟件庫,可以運行在Linux、Windows、Android和Mac OS操作系統上。它輕量級而且高效——由一系列
    的頭像 發表于 02-07 14:19 ?811次閱讀
    <b class='flag-5'>OpenCV</b><b class='flag-5'>入門</b><b class='flag-5'>之</b><b class='flag-5'>OpenCV</b>的基本<b class='flag-5'>操作</b>2

    OpenCV入門OpenCV的基本操作實戰代碼

    OpenCV是一個基于Apache2.0許可(開源)發行的跨平臺計算機視覺和機器學習軟件庫,可以運行在Linux、Windows、Android和Mac OS操作系統上。它輕量級而且高效——由一系列
    的頭像 發表于 02-07 14:24 ?753次閱讀