国产无码免费,人妻口爆,国产V在线,99中文精品7,国产成人无码AA精品一,制度丝袜诱惑av,久久99免费麻辣视频,蜜臀久久99精品久久久久久酒店
        訂閱
        糾錯
        加入自媒體

        OpenCV 指南2:如何在圖像中進行邊緣檢測?

        2021-08-02 10:44
        磐創AI
        關注

        在上篇文章中,我們已經學習了 OpenCV 的基礎知識。我們已經看到了如何執行圖像和視頻調整大小、裁剪等,這是 OpenCV 教程的第二部分。

        本文,我們主要關注 OpenCV 的高級部分,它將涵蓋以下提到的問題。但是,如果你是 OpenCV 的新手或覺得這很難理解,那么請訪問OpenCV 基礎指南第1部分并復習基礎知識,然后再回到此文。

        我們思考的問題是:

        如何在圖像中進行邊緣檢測?

        如何在圖像中進行輪廓檢測?

        如何在圖像中執行顏色空間?

        如何處理顏色通道?

        如何模糊圖像?

        如何使用位運算符?

        如何在圖像的每個像素點繪制顏色的直方圖?

        1)如何在圖像中進行邊緣檢測?

        1.1. Canny:對于這里的邊緣檢測,我們將使用 cv.Canny 方法。輸入圖像為原始圖像,thereshold-1 即像素值低于150 被視為非邊緣,threshold-2 即像素值高于175 被視為有效邊緣。如果該值在 150 和 175 之間,那么如果邊緣像素與有效邊緣相連,則僅將其視為有效邊緣。original_img=cv.imread("/content/drive/MyDrive/Colab Notebooks/Opencv/NCS/hana-lshin-qUhu8zjm38w-unsplash(1).jpg")
        cv2_imshow(original_img)
        print("  Edge detection in the Original images  ")
        #We will find the edges in the image as below
        Edge_Org=cv.Canny(original_img,150,175)
        cv2_imshow(Edge_Org)
        上述代碼的輸出:原圖:

        原始圖像的邊緣:

        現在我們將嘗試通過使其模糊來找到原始圖像的邊緣。博客中進一步介紹了如何使圖像模糊。

        通過比較原始圖像和模糊圖像之間的邊緣檢測。我們知道圖像中的邊緣檢測隨著圖像模糊程度的增加而減少。1.2. 拉普拉斯算子在拉普拉斯邊緣檢測方法中,我們將計算源圖像的 (x,y) 像素的第二個梯度。當 ksize>1 時,查看下面提到的源圖像的拉普拉斯公式:

        當 ksize=1 時,拉普拉斯算子是通過使用以下 3×3 孔徑過濾圖像來計算:

        其中 ksize:用于計算二階導數濾波器的孔徑大小。大小必須是正數和奇數。lap=cv.Laplacian(original_img,cv.CV_64F)
        lap=np.uint8(np.absolute(lap))
        cv2_imshow(lap)
        上述代碼的輸出:拉普拉斯邊緣檢測:

        1.3.Sobel邊緣檢測在計算拉普拉斯算子時,我們計算了稱為 Sobel 的二階導數。因此,在 sobel 檢測中,我們將計算 sobelx(也稱為水平 Sobel 導數)和 sobely(也稱為垂直 Sobel 導數)。我們可以通過輸入圖像與大小為 3*3 的內核進行卷積,來計算 Sobelx 和 sobely(但我們可以根據需要更改內核大小)。拉普拉斯公式中的 Sobelx 和 sobely:

        提到的卷積的 3*3 矩陣是:

        Sobel 邊緣檢測的代碼:#Sobel
        Sobelx=cv.Sobel(Gray_1,cv.CV_64F,1,0)
        Sobely=cv.Sobel(Gray_1,cv.CV_64F,0,1)
        Cpmbine_Sobel=cv.bitwise_or(Sobelx,Sobely)
        print(" SobelX Edge Detection")
        cv2_imshow(Sobelx)
        print(" Sobely Edge Detection")
        cv2_imshow(Sobely)
        print(" ombine Sobel Edge Detection")
        cv2_imshow(Cpmbine_Sobel)
        上述代碼的輸出:Sobelx:

        Sobely:

        結合Sobel:

        1.4. 腐蝕和膨脹

        1.4.1 腐蝕它對于去除小的白噪聲很有用。用于分離兩個連接的對象等。怎么運作:內核(奇數大小的矩陣(3,5,7)與圖像卷積。僅當內核下的所有像素都為 1 時,原始圖像中的像素(1 或 0)才會被視為 1,否則它會被腐蝕(使其為零)。因此,根據內核的大小,將丟棄邊界附近的所有像素。因此,前景對象的厚度或大小會減少,或者只是圖像中的白色區域會減少。1.4.2 膨脹:在去除噪聲等情況下,腐蝕之后是膨脹。因為,腐蝕去除了白噪聲,但它也縮小了我們的對象。所以我們膨脹它。由于噪音消失了,它們不會回來,但我們的對象區域會增加。它也可用于連接對象的損壞部分。這個怎么運作:內核(奇數大小的矩陣(3,5,7)與圖像卷積如果內核下至少有一個像素為“1”,則原始圖像中的像素元素為“1”。它增加了圖像中的白色區域或前景對象的大小增加Dilate 和 Erode 的代碼演練:#Dilating the image i.e., It will incrases the thickness of the edges
        Dilat_img=cv.dilate(Edge_blur,(7,7),iterations=3)
        cv2_imshow(Dilat_img)
        #We can restore to the original edges by using the erode
        print(" ")
        Erode_img=cv.erode(Dilat_img,(7,7),iterations=3)
        cv2_imshow(Erode_img)
        上述代碼的輸出:將圖像輸入到 cv.dilate():

        Dilate : 它會增加邊緣的厚度

        腐蝕:這里的輸入圖像是 cv.dilate 輸出。所以腐蝕輸出將恢復 Dilate 的輸入圖像。

        2)如何在圖像中進行輪廓檢測?

        有時,如果我們對圖像執行邊緣檢測和輪廓檢測,則兩者的輸出可能看起來相似。但與邊緣檢測相比,輪廓檢測通常會更詳細。cv.findContours 函數中的一些重要參數是:Image :輸入圖像應該是二進制作為源,一個8位的單通道圖像。非零像素被視為 1。零像素保持 0,因此圖像被視為二進制。輪廓檢索模式:1)cv.RETR_TREE →它將給出圖像中的分層輪廓。cv.RETR_EXTERNAL →它將給出圖像中唯一的外部輪廓。cv.RETR_LIST →它將給出圖像中存在的所有輪廓。輪廓逼近方法:1)CHAIN_APPROX_NONE →它將給出圖像中存在的所有計數器。2)CHAIN_APPROX_SIMPLE →它將給出圖像中的重要輪廓,例如,如果我們有線,它只會給出圖像中的起點和終點,而在 CHAIN_APPROX_NONE 的情況下,我們得到所有點,F在讓我們來看看它實際上是如何工作的。Org_img=cv.imread("/content/drive/MyDrive/Colab Notebooks/Opencv/NCS/olena-sergienko-UQLGR8otAEs-unsplash(1).jpg")
        Canny_img=cv.Canny(Org_img,100,150)
        cv2_imshow(Canny_img)
        contours,hierarchies= cv.findContours(Canny_img,cv.RETR_LIST,cv.CHAIN_APPROX_NONE)
        print(" Number of the contours in the image: ",len(contours))
        上圖的輸出:

        現在我們將模糊圖像并查看輪廓的數量blur_img=cv.GaussianBlur(Org_img,(5,5),cv.BORDER_DEFAULT)
        #if image has the pixel <150 then it will consider as the 0(black) and if >175 then it is consider as the 255(white)
        blur_Canny=cv.Canny(blur_img,150,175)
        cv2_imshow(blur_Canny)
        # As we have the blur image edges as a Input to the findContours so the number of the contours is also decreases.
        contours,hierarchies= cv.findContours(blur_Canny,cv.RETR_LIST,cv.CHAIN_APPROX_NONE)
        print(" Number of the contours in the image: ",len(contours))
        上述代碼的輸出:

        通過觀察圖像和它的總輪廓,我們知道模糊圖像中的輪廓數量比原始圖像少,F在我們將嘗試在空白圖像上繪制圖像的輪廓cv2_imshow(Canny_img)
        contours,hierarchies= cv.findContours(Canny_img,cv.RETR_LIST,cv.CHAIN_APPROX_SIMPLE)
        print(len(contours))
        print(len(hierarchies))
        Blank_contours=np.zeros((600,600,3),dtype='uint8')
        print(" Plotting the Countours on the blank")
        cv.drawContours(Blank_contours,contours,-1,(0,0,255),1)
        cv2_imshow(Blank_contours)
        上述代碼的輸出:

        在空白圖像上繪制輪廓:

        1  2  3  下一頁>  
        聲明: 本文由入駐維科號的作者撰寫,觀點僅代表作者本人,不代表OFweek立場。如有侵權或其他問題,請聯系舉報。

        發表評論

        0條評論,0人參與

        請輸入評論內容...

        請輸入評論/評論長度6~500個字

        您提交的評論過于頻繁,請輸入驗證碼繼續

        暫無評論

        暫無評論

          掃碼關注公眾號
          OFweek人工智能網
          獲取更多精彩內容
          文章糾錯
          x
          *文字標題:
          *糾錯內容:
          聯系郵箱:
          *驗 證 碼:

          粵公網安備 44030502002758號

          主站蜘蛛池模板: 91免费视频网| 男人天堂a在线| 91视频你懂的| 黑人videos特大hd粗暴| freeAV爽视频| 欧美自拍视频| 亚洲天堂高清| 国产中文| 日韩欧美一级特黄大片| 青青操影院| 亚洲va| 国产浮力第一页| 青青草无码| 亚洲国内自拍| 午夜精品久久久久久久久久老司机| 色二区| 中文字幕av久久爽一区| 91资源总站| 专区国产无码| 康定县| a片地址| 成人亚洲精品一区二区三区嫩花 | 日韩AV免费| 激情久久久| 91丨国产丨白浆秘?3D动漫| 国产VA网站| 大连市| 无毛片| 无码久久久| 临西县| 久久伊人五月天| 第一宅男AV导航| 日本www色| 色婷婷Av| 爱3P| 伊人一区| 亚洲成人在线网址| 国产制服丝袜在线播放| 亚洲精品字幕| 色撸撸视频| 丝袜无码|