Python 如何使用OpenCV从图像中提取感兴趣的ID文档区域?
我正在尝试分割此图像,因为我只需要获取文档 应用一些过滤器,我得到了以下结果: 我试图获得白色矩形的轮廓,但得到了以下结果: 有人知道如何做得更好吗 这是我的代码:/Python 如何使用OpenCV从图像中提取感兴趣的ID文档区域?,python,image,opencv,image-processing,computer-vision,Python,Image,Opencv,Image Processing,Computer Vision,我正在尝试分割此图像,因为我只需要获取文档 应用一些过滤器,我得到了以下结果: 我试图获得白色矩形的轮廓,但得到了以下结果: 有人知道如何做得更好吗 这是我的代码:/ import cv2 image = cv2.imread('roberto.jpg') image = cv2.cvtColor(image, cv2.COLOR_BGR2RGB) gray = cv2.cvtColor(image, cv2.COLOR_RGB2GRAY) _, binary = cv2.thres
import cv2
image = cv2.imread('roberto.jpg')
image = cv2.cvtColor(image, cv2.COLOR_BGR2RGB)
gray = cv2.cvtColor(image, cv2.COLOR_RGB2GRAY)
_, binary = cv2.threshold(gray, 225, 255, cv2.THRESH_BINARY_INV)
cv2.imshow('test', binary)
cv2.waitKey(0)
contours, hierarchy = cv2.findContours(binary, cv2.RETR_LIST, cv2.CHAIN_APPROX_SIMPLE)[-2:]
idx = 0
for cnt in contours:
idx += 1
x,y,w,h = cv2.boundingRect(cnt)
roi=binary[y:y+h,x:x+w]
cv2.rectangle(image,(x,y),(x+w,y+h),(200,0,0),2)
cv2.imshow('img',image)
cv2.waitKey(0)
就快到了,只需使用
cv2.boundingRect
获取x,y,w,h
边界矩形坐标,就可以使用Numpy切片提取/保存ROI。这是结果
我感谢你,显然它已经接近,但是,我在处理时使用的图像检测到一个更大的框,你可以在我共享的最后一张图像中看到,你将知道如何改进处理,使白色纸张的其余部分实际上是白色的呵呵,谢谢!是的,有两种方法:1)添加大模糊(高斯或中值模糊)或2)在对图像进行阈值化后执行“变形打开”以消除小噪声我非常感谢我将测试并更新问题的建议:P
import cv2
# Load image, grayscale, threshold
image = cv2.imread('1.jpg')
gray = cv2.cvtColor(image, cv2.COLOR_BGR2GRAY)
blur = cv2.GaussianBlur(gray, (3,3), 0)
thresh = cv2.threshold(gray, 225, 255, cv2.THRESH_BINARY_INV)[1]
# Get bounding box and extract ROI
x,y,w,h = cv2.boundingRect(thresh)
ROI = image[y:y+h, x:x+w]
cv2.imshow('thresh', thresh)
cv2.imshow('ROI', ROI)
cv2.waitKey()