我想檢測夾具中的卡簧。如果卡環不存在,它應該給出訊息“卡環不存在”。
在這種情況下,雖然我的卡環是藍色的,但我使用了藍色檢測。但是我想知道如果卡環是黑色的可以做什么,因為最難識別黑色的卡環。
請找到輸入影像:
這里有彈性擋圈

這里沒有卡環

請找到彈環檢測的代碼。我也想知道如果檢測到卡環以列印“ok”訊息,我可以用蒙版影像做什么。
import cv2
import numpy as np
import imutils
from imutils import contours
img = cv2.imread('BALL1.jpg')
img=cv2.resize(img,(1000,640))
hsv = cv2.cvtColor(img, cv2.COLOR_BGR2HSV)
lower_range = np.array([110,50,50])
upper_range = np.array([130,255,255])
mask = cv2.inRange(hsv, lower_range, upper_range)
cv2.imshow('image', img)
cv2.imshow('mask', mask)
while(True):
k = cv2.waitKey(5) & 0xFF
if k == 27:
break
cv2.destroyAllWindows()
請找到相同的輸出螢屏截圖。
i/p 影像

蒙版影像

我應用了二值化,但無法從中獲得清晰的結果。請找到輸出的代碼和ss。
import cv2
# read the image file
img = cv2.imread('BALL1.jpg', 2)
img=cv2.resize(img,(1000,640))
ret, bw_img = cv2.threshold(img, 127, 255, cv2.THRESH_BINARY)
# converting to its binary form
bw = cv2.threshold(img, 127, 255, cv2.THRESH_BINARY)
cv2.imshow("Binary", bw_img)
cv2.waitKey(0)
cv2.destroyAllWindows()
下面是檢索到的輸出的 ss

uj5u.com熱心網友回復:
應用于飽和分量的二值化會產生有趣的結果。

對比

但是卡環需要保持著色。
uj5u.com熱心網友回復:
@YvesDaoust 提供的解決方案為解決問題提供了很好的見解。
@YvesDaoust 建議的飽和通道閾值,然后是形態閉合,
#!/usr/bin/python3
# -*- coding: utf-8 -*-
import cv2
import numpy as np
img = cv2.imread("input2.jpg")
hsv = cv2.cvtColor(img, cv2.COLOR_BGR2HSV)
s = hsv[...,1]
th = 100
s[s<th]=0
op = cv2.MORPH_CLOSE
morph_elem = cv2.MORPH_ELLIPSE
morph_size = 5
element = cv2.getStructuringElement(morph_elem, (2*morph_size 1, 2*morph_size 1), (morph_size, morph_size))
mph = cv2.morphologyEx(s, op, element)
# Reference: https://stackoverflow.com/a/47057324
def lcc (image):
image = image.astype('uint8')
nb_components, output, stats, centroids = cv2.connectedComponentsWithStats(image, connectivity=4)
sizes = stats[:, -1]
max_label = 1
max_size = sizes[1]
for i in range(2, nb_components):
if sizes[i] > max_size:
max_label = i
max_size = sizes[i]
img2 = np.zeros(output.shape)
img2[output == max_label] = 255
img2 = img2.astype(np.uint8)
return img2
mask = lcc(mph)
thresh = 20000000
if np.sum(mask) < thresh:
print("circlip not present")
res = img
else:
res = cv2.bitwise_and(img,img,mask = mask)
cv2.namedWindow("img", cv2.WINDOW_NORMAL)
cv2.imshow("img", res)
cv2.waitKey(0)
轉載請註明出處,本文鏈接:https://www.uj5u.com/gongcheng/442589.html
上一篇:將兩個影像標簽組合成一個標簽
