Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/281.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python 如何使用OpenCV从图像中提取感兴趣的ID文档区域?_Python_Image_Opencv_Image Processing_Computer Vision - Fatal编程技术网

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()