日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程资源 > 综合教程 >内容正文

综合教程

OpenCV---开闭操作

發布時間:2024/5/24 综合教程 45 生活家
生活随笔 收集整理的這篇文章主要介紹了 OpenCV---开闭操作 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

一:開操作(先腐蝕后膨脹)

特點:消除噪點,去除小的干擾塊,而不影響原來的圖像

import cv2 as cv
import numpy as np

def camp(val1,val2):
    pv = val1 + val2
    if pv > 255:
        return 255
    if pv < 0:
        return 0
    return pv

def open_demo(image):
    gray = cv.cvtColor(image,cv.COLOR_BGR2GRAY)
    for i in range(1000):  #為灰度圖像加一些噪點
        h = np.random.random_integers(0,gray.shape[0]-1)
        w = np.random.random_integers(0, gray.shape[1]-1)
        val = np.random.random_integers(0, 255)
        gray[h,w] = camp(gray[h,w],val)

    ret,binary = cv.threshold(gray,0,255,cv.THRESH_BINARY|cv.THRESH_OTSU)  #生成二值化圖像
    cv.imshow("binary",binary)
    kernel = cv.getStructuringElement(cv.MORPH_RECT,(3,3))
    binary = cv.morphologyEx(binary,cv.MORPH_OPEN,kernel)  #開操作,先腐蝕后膨脹,會消除一些為1的白色噪點
    cv.imshow("open_demo",binary)


src = cv.imread("./o.png")  #讀取圖片
cv.namedWindow("input image",cv.WINDOW_AUTOSIZE)    #創建GUI窗口,形式為自適應
cv.imshow("input image",src)    #通過名字將圖像和窗口聯系

open_demo(src)

cv.waitKey(0)   #等待用戶操作,里面等待參數是毫秒,我們填寫0,代表是永遠,等待用戶操作
cv.destroyAllWindows()  #銷毀所有窗口

二:閉操作(先膨脹后腐蝕)

特點:可以填充閉合區域

def close_demo(image):
    gray = cv.cvtColor(image,cv.COLOR_BGR2GRAY)
    ret,binary = cv.threshold(gray,0,255,cv.THRESH_BINARY|cv.THRESH_OTSU)
    cv.imshow("binary",binary)
    kernel = cv.getStructuringElement(cv.MORPH_RECT,(15,15))
    binary = cv.morphologyEx(binary,cv.MORPH_CLOSE,kernel)
    cv.imshow("close_demo",binary)


src = cv.imread("./o.png")  #讀取圖片
cv.namedWindow("input image",cv.WINDOW_AUTOSIZE)    #創建GUI窗口,形式為自適應
cv.imshow("input image",src)    #通過名字將圖像和窗口聯系

三:利用開操作完成的任務

(一)提取水平垂直線

def open_demo(image):
    gray = cv.cvtColor(image,cv.COLOR_BGR2GRAY)
    ret,binary = cv.threshold(gray,0,255,cv.THRESH_BINARY_INV|cv.THRESH_OTSU)
    cv.imshow("binary",binary)
    kernel = cv.getStructuringElement(cv.MORPH_RECT,(1,15))  #修改內核為(15,1)可以提起橫線
    binary = cv.morphologyEx(binary,cv.MORPH_OPEN,kernel)
    cv.imshow("open_demo",binary)

原理:

kernel = cv.getStructuringElement(cv.MORPH_RECT,(15,1))

(二)消除干擾線

def open_demo(image):
    gray = cv.cvtColor(image,cv.COLOR_BGR2GRAY)
    ret,binary = cv.threshold(gray,0,255,cv.THRESH_BINARY_INV|cv.THRESH_OTSU)
    cv.imshow("binary",binary)
    kernel = cv.getStructuringElement(cv.MORPH_RECT,(3,3))  #因為干擾線很細,小于我們想要的字母,先腐蝕后膨脹對字母無影響,但是對于細線在腐蝕的時候就處理掉了
    binary = cv.morphologyEx(binary,cv.MORPH_OPEN,kernel)
    cv.imshow("open_demo",binary)

(三)提取滿足要求的形狀

getStructuringElement我們設置的內核形狀為矩形,是可以設置其他形狀

矩形:MORPH_RECT;
交叉形:MORPH_CORSS;
橢圓形:MORPH_ELLIPSE;

參考:OpenCV---膨脹與腐蝕

def open_demo(image):
    gray = cv.cvtColor(image,cv.COLOR_BGR2GRAY)
    ret,binary = cv.threshold(gray,0,255,cv.THRESH_BINARY|cv.THRESH_OTSU)
    cv.imshow("binary",binary)
    kernel = cv.getStructuringElement(cv.MORPH_ELLIPSE,(5,5))
    binary = cv.morphologyEx(binary,cv.MORPH_OPEN,kernel)
    cv.imshow("open_demo",binary)

總結

以上是生活随笔為你收集整理的OpenCV---开闭操作的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。