摘要:使用,進(jìn)行基本的圖像處理提取紅色圓圈輪廓并繪制效果圖源碼寫這篇博客源于博友的提問,想提取圖片中的紅色圓圈坐標(biāo),并繪制封閉的輪廓。還是使用一系列圖像處理,得到了比較理想的結(jié)果。
寫這篇博客源于博友的提問,想提取圖片中的紅色圓圈坐標(biāo),并繪制封閉的輪廓。
看到這個(gè)首先有幾個(gè)解決思路:
1. 霍夫圓提取
2. 圓圈均是紅色,可以轉(zhuǎn)換HSV色彩空間提取
3. 應(yīng)用一系列圖像處理:灰度圖、形態(tài)學(xué)操作、閾值化進(jìn)行簡(jiǎn)單提取
一個(gè)一個(gè)嘗試,霍夫圓不是很理想,調(diào)整了參數(shù),也沒有全部提取到,只提取到了部分。
HSV色彩空間提取紅色,因?yàn)閷?duì)紅色的HSV范圍設(shè)置的不夠合理,效果也不是很好。
還是使用一系列圖像處理,得到了比較理想的結(jié)果。
檢測(cè)原始圖 VS 效果圖如下:
可以看到右圖中,輪廓被用閉合的綠色輪廓連接起來。
檢測(cè)過程1——原圖 VS 剪裁后圖如下:
檢測(cè)過程2—— 灰度圖 VS 白帽圖 VS 梯度圖 VS 形態(tài)學(xué)閉合圖如下:
檢測(cè)過程3——形態(tài)學(xué)閉合圖 VS 二值化圖1 VS 閾值化圖2 如下:
識(shí)別過程3——輪廓過濾圖 VS 提取最終效果圖 如下:
輪廓過濾圖:根據(jù)面積只保留夠大的輪廓圖(截取完的圖片只包含倆個(gè)輪廓,無需過濾,用原始圖則需要過濾)
最終效果圖:倆個(gè)大的輪廓被成功提取
繪制檢測(cè)到的輪廓的組成點(diǎn)為藍(lán)色空心圓形,繪制輪廓為綠色矩形。
檢測(cè)結(jié)果——裁剪后圖檢測(cè)效果圖 VS 原圖直接檢測(cè)效果圖對(duì)比:
可以看到當(dāng)直接使用原圖進(jìn)行上述檢測(cè),坐標(biāo)軸邊界會(huì)有干擾,結(jié)果中會(huì)檢測(cè)出多余的輪廓。
# 提取圓圈的輪廓,并繪制import cv2import imutilsimport numpy as np# 初始化矩形和方形結(jié)構(gòu)內(nèi)核# 在圖像上滑動(dòng)它來進(jìn)行(卷積)操作,如模糊、銳化、邊緣檢測(cè)或其他圖像處理操作。# 使用矩形函數(shù)作為Top-hat形態(tài)學(xué)運(yùn)算符,使用方形函數(shù)作為閉合運(yùn)算。rectKernel = cv2.getStructuringElement(cv2.MORPH_RECT, (9, 3))sqKernel = cv2.getStructuringElement(cv2.MORPH_RECT, (5, 5))# 加載輸入圖像,轉(zhuǎn)換為灰度圖origin = cv2.imread("images/circle.png")image = origin.copy()width = 75height = 34# # 只截取有輪廓的區(qū)域,避免坐標(biāo)軸線等干擾image = image[height:369, width:512]cv2.imshow("origin", origin)cv2.imshow("crop", image)gray = cv2.cvtColor(image, cv2.COLOR_BGR2GRAY)cv2.imshow("gray", gray)# 執(zhí)行形態(tài)學(xué)操作# 應(yīng)用tophat(白帽)形態(tài)學(xué)操作以在暗的背景中提取出亮的區(qū)域# Top hat操作在深色背景(即信用卡號(hào))下顯示淺色區(qū)域tophat = cv2.morphologyEx(gray, cv2.MORPH_TOPHAT, rectKernel)cv2.imshow("tophat", tophat)# 計(jì)算Scharr梯度,計(jì)算梯度值# 在白色禮帽上,計(jì)算x方向的Scharr梯度,然后縮放到范圍[0, 255]gradX = cv2.Sobel(tophat, ddepth=cv2.CV_32F, dx=1, dy=0, ksize=-1)gradX = np.absolute(gradX)(minVal, maxVal) = (np.min(gradX), np.max(gradX))# 最小/最大歸一化, 由float轉(zhuǎn)換gradX到uint8范圍[0-255]gradX = (255 * ((gradX - minVal) / (maxVal - minVal)))gradX = gradX.astype("uint8")cv2.imshow("gradient", gradX)# 使用矩形框應(yīng)用閉合操作以幫助閉合信用卡數(shù)字之間的小的縫隙# 應(yīng)用Otsu"s閾值方法二值化圖像gradX = cv2.morphologyEx(gradX, cv2.MORPH_CLOSE, rectKernel)cv2.imshow("morphologyEx", gradX)thresh = cv2.threshold(gradX, 0, 255, cv2.THRESH_BINARY | cv2.THRESH_OTSU)[1]cv2.imshow("thresh1", thresh)# 在二值化圖像上,應(yīng)用二次閉合操作# 再一次方形框形態(tài)學(xué)操作,幫助閉合小的的縫隙thresh = cv2.morphologyEx(thresh, cv2.MORPH_CLOSE, sqKernel)cv2.imshow("thresh2", thresh)# 閾值圖像中查找輪廓,然后初始化數(shù)字位置列表cnts = cv2.findContours(thresh.copy(), cv2.RETR_EXTERNAL, cv2.CHAIN_APPROX_SIMPLE)cnts = imutils.grab_contours(cnts)print(len(cnts))img = image.copy()# 遍歷輪廓for (i, c) in enumerate(cnts): area = cv2.contourArea(c) print(i, area) # 根據(jù)面積過濾掉不符合的輪廓 if (area < 4000): continue # print(" c: ", type(c), c.shape, c[0], type([c])) cc = c.copy() cc[:, :, 0] += width cc[:, :, 1] += height # print("cc: ", type(cc), cc.shape, cc[0]) for coor in c: # 在輪廓的每個(gè)小圓上繪制藍(lán)色圓圈 cv2.circle(img, (coor[0][0],coor[0][1]),5, (255, 0, 0), 1) cv2.drawContours(origin, [cc], -1, (0, 255, 0), 2) cv2.drawContours(image, [c], -1, (0, 255, 0), 2)cv2.imshow("origin res", origin)cv2.imshow("img res", img)cv2.imshow("image res", image)cv2.imwrite("images/crop_circle_extract.jpg",image)cv2.waitKey(0)
文章版權(quán)歸作者所有,未經(jīng)允許請(qǐng)勿轉(zhuǎn)載,若此文章存在違規(guī)行為,您可以聯(lián)系管理員刪除。
轉(zhuǎn)載請(qǐng)注明本文地址:http://systransis.cn/yun/118780.html
摘要:繪制所有輪廓,傳遞要繪制圖像中的所有輪廓,,,,要繪制單個(gè)輪廓,比如第個(gè)輪廓,,,,但大多數(shù)情況下,繪制第個(gè)輪廓,以下方法將非常有用,,,,代碼 Contours : Getting Started 輪廓 簡(jiǎn)單地解釋為連接所有連續(xù)點(diǎn)(沿著邊界)的曲線,具有相同的顏色或強(qiáng)度. 輪廓是形狀分析和物體檢測(cè)和識(shí)別的有用工具 NOTE 為獲得更好的準(zhǔn)確性,請(qǐng)使用二值圖,在找到輪廓之前,應(yīng)用閾...
摘要:某寶一年一度的集五福活動(dòng)更是成為每年的必備活動(dòng)。今年再來對(duì)福字做文章,演示下如何用的圖像處理功能,把一幅福字圖片轉(zhuǎn)出種不同的效果最圖像處理最常用的兩個(gè)模塊是和,這里我們選擇。輪廓福使用了自帶的圖像輪廓提取功能。 快過年了,各種互聯(lián)網(wǎng)產(chǎn)品都出來撒紅包。某寶一年一度的集五福(shua hou)活動(dòng)更是成為每年的必備活動(dòng)。雖然到最后每人大概也就分個(gè)兩塊錢,但作為一個(gè)全民話題,大多數(shù)人還是愿意...
閱讀 2138·2021-11-23 09:51
閱讀 3715·2021-10-20 13:49
閱讀 1722·2021-09-06 15:13
閱讀 1834·2021-09-06 15:02
閱讀 3189·2021-09-02 15:11
閱讀 903·2019-08-29 15:37
閱讀 1748·2019-08-29 13:24
閱讀 2288·2019-08-29 11:28