我是OpenCV的新手,在弄清楚如何在图像中裁剪矩形时遇到了一些麻烦.我有一张PDF格式的表格(我已经转换成图像),它看起来类似于这here.我想要裁剪到大矩形(而不是每个单独的矩形),这样我的输出图像就只是大矩形和其中包含的每一个.
我试图最终提取出包含在大矩形中的信息,但我的第一步是我需要在矩形周围进行裁剪;我的实际图像在矩形的顶部有一些文本,下面也有一些文本,就像示例图像一样.我try 在this question中使用该代码,但它产生的输出图像与原始图像没有什么不同,并且没有在矩形周围进行裁剪.
thresh_value = 10
img = cv2.medianBlur(img_raw, 5)
dilation = cv2.dilate(img,(3,3),iterations = 3)
img_gray = cv2.cvtColor(img, cv2.COLOR_BGR2GRAY)
(T, thresh) = cv2.threshold(img_gray, thresh_value, 255, cv2.THRESH_BINARY)
contours, hierarchy = cv2.findContours(thresh, cv2.RETR_TREE, cv2.CHAIN_APPROX_SIMPLE)
contours = [i for i in contours if cv2.contourArea(i) < 5000]
cv2.drawContours(img, contours, -1, (0,0,0), 10, lineType=8)
cv2.imwrite("cropped_img.jpg", img)
在定义等高线和层次的那条线上,原始代码是_, contours, hierarchy =
,但我收到了一个错误,说是ValueError: not enough values to unpack (expected 3, got 2)
.
我确实使用了boundingRect
函数来删除空格(如下面的代码块所示),我认为这是最有希望的,但我不完全清楚如何将其调整为查找矩形,而不是查找文本.
gray = 255*(img_raw < 128).astype(np.uint8)
coords = cv2.findNonZero(gray)
x, y, w, h = cv2.boundingRect(coords)
processed_image = img_raw[y:y+h, x:x+w]
我到底做错了什么?