我需要识别颜色发生变化的像素。我搜索了边缘检测和线检测技术,但不确定这些技术的应用方式和方式。
以下是我天真的尝试:
应用Canny Edge Detection
edges = cv2.Canny(img,0,10)
有各种参数,但它没有工作
Hough Line Transform
检测文档中的行本练习背后的意图是我在pdf文档中有一个格式错误的表格,其背景是我附上的。如果我能够在此问题中使用颜色匹配来识别行边界,我的问题将减少到识别数据中的列。
答案 0 :(得分:1)
欢迎使用图像处理。你在这里尝试做的基本上是试图找到相邻像素之间颜色变化很大的地方,因此y方向上像素强度的导数很大。在信号处理中,那些被称为高频。图像中高频率最常见的探测器称为Canny边缘探测器,您可以找到very nice tutorial here, on the OpenCV website。
该算法非常易于实现,只需几个简单的步骤:
import cv2
# load the image
img = cv2.imread("sample.png")
# convert to grayscale
img = cv2.cvtColor(img, cv2.COLOR_BGR2GRAY)
# resize for the visualization purposes
img = cv2.resize(img, None, img, fx=0.4, fy=0.4)
# find edges with Canny
edges = cv2.Canny(img, 10, 20, apertureSize=3)
# show and save the result
cv2.imshow("edges", edges)
cv2.waitKey(0)
cv2.imwrite("result.png", edges)
由于您的案例非常简单,您不必担心Canny()函数调用中的参数。但如果您选择了解他们的操作,我建议您查看how to implement a trackbar并将其用于实验。结果:
祝你好运。