我想檢測內部圖像的徽標,以消除它,我有一個想法是尋找具有大量像素然後刪除的對象,另一個想法是循環所有的白色像素(我已倒置我的形象),並尋找形成一個大區域的像素,然後去除這個區域,有沒有更好的算法,這個,還有opencv中的哪些方法將幫助我檢測大像素數目的對象。如何使用opencv檢測大量白色像素的區域?
回答
我有一個方法可以做到這一點。我不知道這種方法是否適用於所有人,但在這裏效果很好。
下面是代碼(在Python):
首先轉換圖像爲灰度,調整大小圖像,應用閾值,並進行相同的尺寸和的該尺寸調整灰度圖像的類型的掩模圖像。 (遮罩圖像只是一個黑色圖像)
import cv2
import numpy as np
img = cv2.imread('bus.png')
img = cv2.resize(img,(400,500))
gray = cv2.cvtColor(img,cv2.COLOR_BGR2GRAY)
ret,gray = cv2.threshold(gray,127,255,0)
gray2 = gray.copy()
mask = np.zeros(gray.shape,np.uint8)
現在在閾值圖像中找到輪廓。過濾500到5000之間的輪廓。它最可能是一個大的白色斑點,顯然不是字母。 (記住,這個區域特別適合這張圖片,我不知道你的其他圖像,你必須自己找到它)。現在在填充了白色的蒙版圖像上繪製輪廓。
contours, hier = cv2.findContours(gray,cv2.RETR_LIST,cv2.CHAIN_APPROX_SIMPLE)
for cnt in contours:
if 200<cv2.contourArea(cnt)<5000:
cv2.drawContours(img,[cnt],0,(0,255,0),2)
cv2.drawContours(mask,[cnt],0,255,-1)
Below is the detected contour image:
Next is the mask image:
現在你使用cv2.bitwise_not
功能反轉圖像。您可以選擇在掩模圖像的哪個位置放置掩模,以便該功能僅在輸入圖像中掩模圖像中存在白色的區域進行操作。
cv2.bitwise_not(gray2,gray2,mask)
最後顯示的圖像:
cv2.imshow('IMG',gray2)
cv2.waitKey(0)
cv2.destroyAllWindows()
,這裏是結果:
注:
以上方法是爲了在白色方塊中保存「橙色」。這就是爲什麼有些神器出現在那裏。如果你不想那個橘子,它可以更準確。
只需找到區域過濾輪廓的邊界矩形和填充黑色的繪製矩形。
代碼:
import cv2
import numpy as np
img = cv2.imread('bus.png')
img = cv2.resize(img,(400,500))
gray = cv2.cvtColor(img,cv2.COLOR_BGR2GRAY)
ret,gray = cv2.threshold(gray,127,255,0)
gray2 = gray.copy()
contours, hier = cv2.findContours(gray,cv2.RETR_LIST,cv2.CHAIN_APPROX_SIMPLE)
for cnt in contours:
if 200<cv2.contourArea(cnt)<5000:
(x,y,w,h) = cv2.boundingRect(cnt)
cv2.rectangle(gray2,(x,y),(x+w,y+h),0,-1)
cv2.imshow('IMG',gray2)
cv2.waitKey(0)
cv2.destroyAllWindows()
結果:
檢測邊界rects:
然後fillout與黑色矩形的那些:
它比以前的更好,當然如果你不想「ORANGE」)
您可以使用形態濾波器(也許交替順序濾波),以簡化您的多彩色圖像,然後使用分割算法像分水嶺或粒度的一些方法和選擇的最大對象。您可能會在網上找到幾個實現。但是,只有徽標是離散的(例如不在背景中),這才能起作用。
你是什麼意思(不是背景) – chostDevil 2012-04-21 20:34:10
@PatrickJones意味着我的意思是,如果它是一個形象的地方,而不是一個那些徽標在文本下並且佔據整個卡片的名片。或者如果卡被分成幾個顏色區域。有很多情況。 – sivann 2012-04-21 20:38:18
什麼是形態過濾器或交替順序過濾請討論 – chostDevil 2012-04-21 20:47:41
- 1. 使用opencv和Javacv計算輪廓中的白色區域像素
- 2. 檢測空白區域的圖像
- 3. 在Android中使用openCV檢測特定顏色的區域
- 4. 使用OpenCv檢測圖像中的矩形明亮區域
- 5. OpenCV的:檢測黑到白的漸變區域中的
- 6. 如何確定OpenCV中的像素是黑色還是白色?
- 7. 如何使用opencv自動檢測並填充封閉區域?
- 8. OpenCV的分組白色像素
- 9. 找到特定區域中的白色/黑色像素javacv
- 10. 如何檢測測量水位的白色測量板?
- 11. 漫畫氣球檢測:如何計算矢量內的白色像素<RotatedRect> OpenCV中的橢圓?
- 12. OpenCV的,Java的:顏色檢測某一指定區域
- 13. 獲取白色像素座標(OpenCV)
- 14. 遮蔽JPEG圖像的白色區域
- 15. OpenCV,Android:來自特定區域或圖像部分的顏色檢測?
- 16. 使用opencv/Numpy在python中查找彩色圖像中的白色像素
- 17. 空白區域的像素寬度
- 18. 如何計算opencv中每個blob中的白色像素?
- 19. 如何從白色區域去除噪聲,又不失白色區域
- 20. 如何檢測黑白圖像中的白色斑點(矩形)?
- 21. 如何按顏色過濾OpenCV圖像中的矩形區域?
- 22. 使用opencv檢測純白色圓圈HoughCircles
- 23. 檢測圖像上的文本並計算使用OpenCv的區域
- 24. 我如何更改使用白蟒的OpenCV只黑色無像素運算
- 25. 使用cvMinMaxLoc識別白色區域()
- 26. 如何使用opencv在matlab中查找彩色圖像的感興趣區域?
- 27. 如何使用openCV中的HoughCircles檢測感興趣區域中的圓圈?
- 28. 使用opencv檢測黑色背景上的白色物體的矩形
- 29. 如何檢測OpenCV Python中的紅色?
- 30. 使用opencv和python進行facedetection只能檢測眼睛區域
你爲什麼調整圖像大小? – chostDevil 2012-04-22 10:49:55
這是因爲你的圖像太大以至於我的屏幕無法將它作爲一個整體包含在內。 (這裏不是很重要,如果你不喜歡就避免它,'也是小圖像意味着更快的操作')順便說一下,你真正想要的方法是什麼?與橙色或沒有橙色? – 2012-04-22 10:53:47
如果您知道C++,請更新您的答案,因爲我無法在python和C++之間進行映射 – chostDevil 2012-04-22 11:49:33