首页 > 解决方案 > 如何获得黑白阈值之间的长边?

问题描述

使用 OpenCv 我将绿色区域转换为白色(255)和黑色(0):请参阅电流输出。

使用 Canny、Laplacian 和 Sobel 边缘检测会产生许多小边缘,而不是长的一致边缘,请参见 CANNY EDGE 示例。

我怎样才能获得所需输出中的一条长边?

相关代码:

image = cv.imread('grass pic.jpg')
lane_image = np.copy(image)
pic = cv.cvtColor(lane_image ,cv.COLOR_BGR2RGB)

lower = np.array([24,0,0])
upper = np.array([177, 194, 20])

green_selection = cv.inRange(pic, lower, upper)
canny= cv.Canny(green_selection,50,150)

plt.imshow(canny, cmap='gray')

在此处输入图像描述

当前输出:

电流输出

CANNY EDGE 示例

精明边缘

期望的输出:

期望的输出

标签: opencvcomputer-visionedge-detectioncanny-operatorsobel

解决方案


将图像转换为 HSV 颜色空间可能会帮助您检测所需的线条。

import cv2
import numpy as np

image = cv2.imread("image.png")
HSV = cv2.cvtColor(image, cv2.COLOR_BGR2HSV)

low = np.array([23, 98, 0])
high = np.array([253, 255, 255])

mask = cv2.inRange(HSV, low, high)
cv2.imshow("mask", mask)
cv2.imwrite("mask.png", mask)

result = cv2.bitwise_and(image, image, mask=mask)
cv2.imshow("result", result)
cv2.imwrite("result.png", result)

cv2.waitKey(0)
cv2.destroyAllWindows()
蒙版图像 结果图像
在此处输入图像描述 在此处输入图像描述

推荐阅读