看,我一直试图在书架上检测书籍:

我使用Contours作为边界框.但是,我只想捕获实际的书籍对象.如果我从Canny中减去阈值,它将不会自己检测书籍边缘,但它会检测书籍标题或脊柱中的某些图像.
我使用了houghlines,它可以很好地检测书籍边缘.如何应用边界框但使用houghlines而不是轮廓?
我用于轮廓发现的代码:
edges = cv2.Canny(blur,thresh,thresh*2)
drawing = np.zeros(img.shape,np.uint8)
contours,hierarchy = cv2.findContours(edges,cv2.RETR_TREE,cv2.CHAIN_APPROX_SIMPLE)
for cnt in contours:
x,y,w,h = cv2.boundingRect(cnt)
cv2.rectangle(img,(x,y),(x+w,y+h),(0,255,0),2)
rect = cv2.minAreaRect(cnt)
box = cv2.cv.BoxPoints(rect)
box = np.int0(box)
Run Code Online (Sandbox Code Playgroud)
哪里:
img = cv2.imread('books3.jpg')
gray = cv2.cvtColor(img,cv2.COLOR_BGR2GRAY)
blur = cv2.GaussianBlur(gray,(5,5),0)
Run Code Online (Sandbox Code Playgroud)
对于houghlines:
lines = cv2.HoughLines(edges,1,np.pi/180,120)
for rho,theta in lines[0]:
a = np.cos(theta)
b = np.sin(theta)
x0 = a*rho
y0 = b*rho
x1 = int(x0 + 1000*(-b))
y1 = int(y0 + 1000*(a))
x2 = int(x0 - 1000*(-b))
y2 = int(y0 - 1000*(a))
Run Code Online (Sandbox Code Playgroud)
哪里:
im = cv2.imread('books2.jpg')
gray = cv2.cvtColor(im,cv2.COLOR_BGR2GRAY)
edges = cv2.Canny(gray,100,300,apertureSize = 3)
Run Code Online (Sandbox Code Playgroud)
非常感谢你提前.
我自己实际上也在做类似的事情。试图将书架上的书分开。我想请问一下,目前你们方面的进展如何?
我还没有尝试过轮廓方法。然而,我所做的尝试是在使用 HoughLines 之前对图像进行预处理,对图像进行扫描。下图显示了粗略的结果。
我承认我也必须完美地分割这些书。正如您在图像中看到的那样,由于书脊的性质,线条比我实际想要的要多。我正在研究可以帮助我解决此类问题的预处理方法。
我注意到你提到“如果我降低 Canny 的阈值,它不会检测到书籍边缘本身,但会检测到书名或书脊上的一些图像。” 也许对于 HoughLine 参数,您可以调整 theta?例如90度,这样书名等就不会被检测到。
您还可以尝试HoughLineP这基本上是概率霍夫线变换。有关详细信息,请参阅:
http://docs.opencv.org/doc/tutorials/imgproc/imgtrans/hough_lines/hough_lines.html
希望我的方法能给您一些想法。我也希望听到您关于轮廓方法的最新消息。希望我们能够分享技巧并共同努力,因为我们有一个共同的目标(:希望很快收到您的来信。
| 归档时间: |
|
| 查看次数: |
1735 次 |
| 最近记录: |