Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/292.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/C++_Python_C++_Image_Opencv_Computer Vision - Fatal编程技术网

从一个文档中粘贴了两个图像的图像中获取两个图像-Python/C++

从一个文档中粘贴了两个图像的图像中获取两个图像-Python/C++,python,c++,image,opencv,computer-vision,Python,C++,Image,Opencv,Computer Vision,我有一份文件——比如说身份证的背面和正面。类似这样的东西 目标是检索图像1和图像2作为两个单独的图像。扫描的文件是黑白的 我的问题是: 1.这是否可行? 2.如有任何关于如何继续的想法/代码片段,将不胜感激 提前感谢,您可以试试findContours findContours (image, contours, hierarchy, CV_RETR_EXTERNAL, CV_C

我有一份文件——比如说身份证的背面和正面。类似这样的东西 目标是检索图像1和图像2作为两个单独的图像。扫描的文件是黑白的

我的问题是: 1.这是否可行? 2.如有任何关于如何继续的想法/代码片段,将不胜感激


提前感谢,

您可以试试findContours

findContours (image, contours, hierarchy,                 
              CV_RETR_EXTERNAL,              
              CV_CHAIN_APPROX_SIMPLE,
              Point(0, 0));
然后使用drawContours查看是否选择了所需的图像。 您可以找到轮廓的边界框,无需担心扫描错误。 如果这不能直接工作,试着预处理你的图像,你可以尝试变形,阈值等


我希望这有帮助

由于您没有提供和图像。。。我会提供一些样品。我之所以使用ImageMagick,是因为您只需在命令行中进行操作,而无需编译任何内容,但您可以在OpenCV和Python中应用完全相同的技术

这是一张示例图像

现在,如果没有正确曝光,扫描可能有噪声,也可能没有纯白色和黑色,因此,作为第一步,您可以对图像进行归一化或自动调平,将其设置为纯黑色和白色阈值,并应用中值滤波器来去除噪声,尤其是在JPEG图像的情况下

convert scan.jpg -normalize -threshold 90% -median 9x9 -negate result.png

也许您现在想使用一些形态学来闭合孔:

convert scan.jpg -normalize -threshold 90% -median 9x9 -negate -morphology close disk:7 result.png
现在,您可以进行一些连接组件分析以找到BLOB:

convert scan.jpg -threshold 90% -median 9x9 -negate \
   -morphology close disk:7                         \
   -define connected-components:verbose=1           \
   -connected-components 8 -auto-level result.png
样本输出

这会产生一个标记图像,我们实际上不会使用它,但会识别出它在一个连续较浅的阴影中发现的每个斑点

现在看看上面的文本输出,您可以看到有5个blob-每行一个。您可以检查第四个字段(即斑点区域)和第五个字段(即颜色),这将有助于区分黑色和白色斑点。让我们看两个斑点,并将它们绘制在原始图像上:

convert scan.jpg -fill "rgba(255,0,0,0.5)" -draw "rectangle 352,54 628,242" result1.png
现在,我们可以将各个页面切掉:

convert scan.jpg -crop 276x188+352+54 doc1.png

MarkSetchell要求我用我的脚本multicrop2来展示他的例子,该脚本的功能与他的所有命令类似。看

我注意到他的图像周围有一个黑色的边框。所以我需要先用Imagemagick剃须刀将其删除,然后将其导入我的脚本multicrop2

convert vZiPW.jpg -shave 3x3 miff:- | multicrop2 -u 1 -f 1 -m save -d 10000 vZiPW_shaved.png multicrop_results.jpg
在脚本中,我使用-u 1进行反旋转,以取消提取图像的旋转。我使用-f1模糊值或1%的公差,以允许JPG压缩在泛光填充期间更改为背景白色,从而制作遮罩。我还保存脚本首先提取的掩码以定位这两个图像。由于图像的颜色接近白色,因此可能存在小孔或斑点。因此,我的脚本将使用连接的组件进程来填补这些漏洞。因此,它忽略了面积小于10000像素的任何区域,如-d 10000所示。更重要的是,它使用连接的组件从遮罩中定位两个大区域的边界框,然后从输入图像中裁剪和取消旋转相应的区域

以下是泛光填充操作后和连接组件处理前的原始遮罩,用于去除小斑点:

以下是deskew取消旋转后提取的两幅图像


正确的图像可能会得到更好的答案。@MarkSetchell将获得正确的代表性图像,出于隐私原因无法上载实际图像!这将更清楚地显示分辨率和大小、噪声量、分离度和颜色-只需模糊或遮住最敏感的部分,但尽可能多地留下图案和边框/环绕。请在提供图像后给我回电话。如果您使用类似Unix的系统,您可以尝试我的bash imagemagick脚本,multicrop或multicrop2 at和。示例显示在这些页面上,脚本可以从中下载感谢分享!干得好,弗雷德!非常感谢。请继续回答,这样我们可以分享和学习一些东西。我想这是OpenCV。今后,请确定正在使用的代码。
convert scan.jpg -crop 276x188+352+54 doc1.png
convert scan.jpg -crop 275x194+43+44  doc2.png
convert vZiPW.jpg -shave 3x3 miff:- | multicrop2 -u 1 -f 1 -m save -d 10000 vZiPW_shaved.png multicrop_results.jpg