灰度图像上的颜色轮廓
colour contour on grayscale image
我编写了一个简单的代码来查找图像中对象的轮廓。
img = cv2.imread(file_path, cv2.IMREAD_GRAYSCALE)
blur = cv2.GaussianBlur(img_enhanced,(25,25),0) # apply blur for contour
ret, binary = cv2.threshold(blur,1,255,cv2.THRESH_BINARY) # apply threshold to blur image
contours, hierarchy = cv2.findContours(binary, cv2.RETR_EXTERNAL, cv2.CHAIN_APPROX_SIMPLE) # find countour
obj_index = contours.index(max(contours, key=len)) # find index of largest object
contour_img = cv2.drawContours(img, contours, obj_index, (0,255,0), 3) # draw coutour on original image
plt.imshow(contour_img)
plt.show()
原图已经是灰度图了,反正我在导入图的时候应用了cv2.IMREAD_GRAYSCALE。
我想如果我在 'Draw' 轮廓时应用灰度图像,语法如下,
contour_img = cv2.drawContours(img, contours, obj_index, (0,255,0), 3)
我可以得到一个带有彩色轮廓的灰度图像,但它显示
奇怪的彩色图像。
如何在灰度图上绘制彩色轮廓线?
提前致谢
图像样本:黑色背景和白色物体
根据我的评论:
试试这样的东西,告诉我它是否有效
编辑:我更改了阈值范围。 cv2.threshold(blur,25,255,cv2.THRESH_BINARY)
img = cv2.imread(file_path, 1)
print(img.shape) # this should give you (img_h, img_w, 3)
img2 = cv2.cvtColor(img, cv2.COLOR_BGR2GRAY)
blur = cv2.GaussianBlur(img2,(25,25),0) # apply blur for contour
ret, binary = cv2.threshold(blur,25,255,cv2.THRESH_BINARY) # apply threshold to blur image
contours, hierarchy = cv2.findContours(binary, cv2.RETR_EXTERNAL, cv2.CHAIN_APPROX_SIMPLE) # find countour
obj_index = contours.index(max(contours, key=len)) # find index of largest object
contour_img = cv2.drawContours(img, contours, obj_index, (0,255,0), 3) # draw coutour on original image
plt.imshow(contour_img, cmap='gray')
plt.show()
plt.hist(blur.ravel(), bins=50)
我编写了一个简单的代码来查找图像中对象的轮廓。
img = cv2.imread(file_path, cv2.IMREAD_GRAYSCALE)
blur = cv2.GaussianBlur(img_enhanced,(25,25),0) # apply blur for contour
ret, binary = cv2.threshold(blur,1,255,cv2.THRESH_BINARY) # apply threshold to blur image
contours, hierarchy = cv2.findContours(binary, cv2.RETR_EXTERNAL, cv2.CHAIN_APPROX_SIMPLE) # find countour
obj_index = contours.index(max(contours, key=len)) # find index of largest object
contour_img = cv2.drawContours(img, contours, obj_index, (0,255,0), 3) # draw coutour on original image
plt.imshow(contour_img)
plt.show()
原图已经是灰度图了,反正我在导入图的时候应用了cv2.IMREAD_GRAYSCALE。
我想如果我在 'Draw' 轮廓时应用灰度图像,语法如下,
contour_img = cv2.drawContours(img, contours, obj_index, (0,255,0), 3)
我可以得到一个带有彩色轮廓的灰度图像,但它显示 奇怪的彩色图像。
如何在灰度图上绘制彩色轮廓线?
提前致谢
图像样本:黑色背景和白色物体
根据我的评论:
试试这样的东西,告诉我它是否有效
编辑:我更改了阈值范围。 cv2.threshold(blur,25,255,cv2.THRESH_BINARY)
img = cv2.imread(file_path, 1)
print(img.shape) # this should give you (img_h, img_w, 3)
img2 = cv2.cvtColor(img, cv2.COLOR_BGR2GRAY)
blur = cv2.GaussianBlur(img2,(25,25),0) # apply blur for contour
ret, binary = cv2.threshold(blur,25,255,cv2.THRESH_BINARY) # apply threshold to blur image
contours, hierarchy = cv2.findContours(binary, cv2.RETR_EXTERNAL, cv2.CHAIN_APPROX_SIMPLE) # find countour
obj_index = contours.index(max(contours, key=len)) # find index of largest object
contour_img = cv2.drawContours(img, contours, obj_index, (0,255,0), 3) # draw coutour on original image
plt.imshow(contour_img, cmap='gray')
plt.show()
plt.hist(blur.ravel(), bins=50)