【发布时间】:2016-08-27 05:39:21
【问题描述】:
我有几张桌子上的页面图片。我想从图像中裁剪页面。通常,页面将是图像中最大的矩形,但是,在某些情况下,矩形的所有四个边可能都不可见。
我正在执行以下操作,但没有得到想要的结果:
import cv2
import numpy as np
im = cv2.imread('images/img5.jpg')
gray=cv2.cvtColor(im,cv2.COLOR_BGR2GRAY)
ret,thresh = cv2.threshold(gray,127,255,0)
_,contours,_ = cv2.findContours(thresh,cv2.RETR_LIST,cv2.CHAIN_APPROX_SIMPLE)
areas = [cv2.contourArea(c) for c in contours]
max_index = np.argmax(areas)
cnt=contours[max_index]
x,y,w,h = cv2.boundingRect(cnt)
cv2.rectangle(im,(x,y),(x+w,y+h),(0,255,0),2)
cv2.imshow("Show",im)
cv2.imwrite("images/img5_rect.jpg", im)
cv2.waitKey(0)
以下是几个例子:
【问题讨论】:
-
这个问题很难解决,因为木材颜色和纸张颜色都不是相同的......我的意思是,这个算法的问题是阈值......因为您正在此阈值之后找到轮廓...我建议您尝试在彩色图像中对类似木材的颜色进行阈值处理,或者尝试不同的方法。您可以尝试一些边缘检测器,如 canny(已经有一些阈值),然后对其进行 findcontours。
标签: python opencv image-processing