Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/opencv/3.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)_Python_Opencv_Canny Operator - Fatal编程技术网

去除背景条纹(Python、OpenCV)

去除背景条纹(Python、OpenCV),python,opencv,canny-operator,Python,Opencv,Canny Operator,我正在试验一个项目,我必须提取一个正方形,特别是一张身份证 问题发生在刚开始时,当我试图检测(并在提取)卡时。 我将Canny Edge与以下代码一起使用: import cv2 import numpy as np card = cv2.imread('card.png') card = cv2.resize(card, (800, 800)) gray = cv2.cvtColor(card, cv2.COLOR_BGR2GRAY) gray = cv2.GaussianBlur(gr

我正在试验一个项目,我必须提取一个正方形,特别是一张身份证

问题发生在刚开始时,当我试图检测(并在提取)卡时。 我将Canny Edge与以下代码一起使用:

import cv2
import numpy as np

card = cv2.imread('card.png')
card = cv2.resize(card, (800, 800))

gray = cv2.cvtColor(card, cv2.COLOR_BGR2GRAY)
gray = cv2.GaussianBlur(gray, (5, 5), 0)
cv2.imshow("Gray", gray)
cv2.waitKey(0)

# detect edges in the image
edged = cv2.Canny(gray, 10, 250)
cv2.imshow("Edged", edged)
cv2.waitKey(0)

# construct and apply a closing kernel to 'close' gaps between 'white'
# pixels
kernel = cv2.getStructuringElement(cv2.MORPH_RECT, (10, 10))
closed = cv2.morphologyEx(edged, cv2.MORPH_CLOSE, kernel)
cv2.imshow("Closed", closed)
cv2.waitKey(0)
对于此图像(手动应用模糊以保护隐私),这是Canny edge的结果

这是普通卡的结果(应用模糊后)

我的问题是2:如何去除背景条纹?如何最终在最后一张图像中缩小间隙(由于模糊,在第一张处理过的图像中缩小间隙,但以最后一张图像为例)

奖金

我将其添加为替代源(以及我的结果-封闭内核)


谢谢

尝试将图像转换为hsv颜色空间,而不是将其转换为灰度。并利用饱和通道进行边缘检测。代码和结果:

import cv2
import numpy as np

card = cv2.imread('inputs/Idcard.jpg')
hsv = cv2.cvtColor(card, cv2.COLOR_BGR2HSV)
blur = cv2.GaussianBlur(hsv[:,:,1],(7,7),0)
edged = cv2.Canny(blur, 10, 250)
cv2.imwrite("Edged.jpg", edged)

尝试将图像转换为hsv颜色空间,而不是将其转换为灰度。并利用饱和通道进行边缘检测。代码和结果:

import cv2
import numpy as np

card = cv2.imread('inputs/Idcard.jpg')
hsv = cv2.cvtColor(card, cv2.COLOR_BGR2HSV)
blur = cv2.GaussianBlur(hsv[:,:,1],(7,7),0)
edged = cv2.Canny(blur, 10, 250)
cv2.imwrite("Edged.jpg", edged)

谢谢你的回答。这似乎是方法,但我不能达到同样的结果。问题可能是图像太大了?因为如果我将图像大小调整为较小的图像,代码可以工作,但下一步(OCR)几乎是不可能的。你可以找到轮廓并得到一个遮罩。将遮罩与原始图像一起用于OCR。如有必要,发布另一个问题,因为解决方案会变长。@Link您找到问题的解决方案了吗?而OCR呢?我正在尝试做完全相同的事情…谢谢你的回答。这似乎是方法,但我不能达到同样的结果。问题可能是图像太大了?因为如果我将图像大小调整为较小的图像,代码可以工作,但下一步(OCR)几乎是不可能的。你可以找到轮廓并得到一个遮罩。将遮罩与原始图像一起用于OCR。如有必要,发布另一个问题,因为解决方案会变长。@Link您找到问题的解决方案了吗?而OCR呢?我正试图做同样的事情。。。