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

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/sql-server-2005/2.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裁剪轮廓边框后的图像_Python_Opencv_Image Processing_Python Imaging Library - Fatal编程技术网

如何使用Python裁剪轮廓边框后的图像

如何使用Python裁剪轮廓边框后的图像,python,opencv,image-processing,python-imaging-library,Python,Opencv,Image Processing,Python Imaging Library,我基本上有数千张带有黑色轮廓的人物图像,所有这些图像要么有白色背景,要么有一些图形背景,通常后面只有一个木质纹理 我想要的是创建一个函数(opencv/pil/whatever),允许我自动拍摄这些图像,基本上删除角色轮廓之外的所有内容 左侧是原始的未裁剪图像,右侧是裁剪图像。这是可能的吗?使用简单的方法,你可以获得大部分的方法。假设背景中没有任何黑色,我们可以通过在黑色上遮罩来寻找轮廓的角色 然后我们要填写大纲内的所有内容 最后我们可以把面具外面的东西都涂成白色 这张照片的明显问题是,

我基本上有数千张带有黑色轮廓的人物图像,所有这些图像要么有白色背景,要么有一些图形背景,通常后面只有一个木质纹理

我想要的是创建一个函数(opencv/pil/whatever),允许我自动拍摄这些图像,基本上删除角色轮廓之外的所有内容


左侧是原始的未裁剪图像,右侧是裁剪图像。这是可能的吗?

使用简单的方法,你可以获得大部分的方法。假设背景中没有任何黑色,我们可以通过在黑色上遮罩来寻找轮廓的角色

然后我们要填写大纲内的所有内容

最后我们可以把面具外面的东西都涂成白色

这张照片的明显问题是,我们最终捕捉到了憨豆先生手臂上的背景。我看不出一个简单的解决方法。我们可以尝试在遮罩内部区域进行颜色直方图匹配;尝试查找遮罩内与遮罩外具有相同颜色轮廓的区域,但这将比当前显示的代码复杂得多

如果当前方法适用于您的大多数图像,并且您可以轻松手动编辑其余图像,请执行。如果这个答案真的不能接受,那么请告诉我,如果我有时间,我会尝试解决它

导入cv2
将numpy作为np导入
#加载图像
img=cv2.imread(“outlined.png”);
#黑色面具
灰色=cv2.CVT颜色(img,cv2.COLOR_BGR2GRAY);
掩模=cv2.inRange(灰色,0,50);
#查找等高线(这是使用OpenCV 3,如果使用OpenCV 2或4,则返回为[contours,3;])
_,等高线,u=cv2.找到的轮廓(遮罩,cv2.RETR_列表,cv2.链约无);
#复位和填充掩模
掩码[:]=0;
对于轮廓中的con:
掩模=cv2。绘制轮廓(掩模,[con],-1255,-1);
#使用遮罩重画图像
img[mask!=255]=(255255);
#展示
cv2.imshow(“图像”,img);
cv2.imshow(“面具”,面具);
cv2.waitKey(0);

如果前景色和背景色之间存在对比度,则可以使用恒定的背景色。但任意纹理的背景是非常困难的。你需要一种人工智能/深度学习方法。看见