Image 从图像1中提取图像2
我想画边界框周围的文字像这样的图像Image 从图像1中提取图像2,image,image-processing,image-segmentation,Image,Image Processing,Image Segmentation,我想画边界框周围的文字像这样的图像 从这个。有谁能给我一个好的方法来做这个或者一些算法或者其他什么吗?对于一个统一的背景,一个简单的解决方案是识别所有与背景颜色不匹配的像素,然后在这些像素的每个轴上找到最小和最大索引来定义一个矩形 例如,如果您使用Matlab,这可能类似于: 使用“查找”来标识非背景像素(例如linearIndices=find(~(image1==background)),其中背景是对应于背景像素的一组硬编码RGB值或由图像模式标识的一组RGB值 “Find”将返回线性索引而
从这个。有谁能给我一个好的方法来做这个或者一些算法或者其他什么吗?对于一个统一的背景,一个简单的解决方案是识别所有与背景颜色不匹配的像素,然后在这些像素的每个轴上找到最小和最大索引来定义一个矩形 例如,如果您使用Matlab,这可能类似于:
虽然函数建议专门对应于Matlab函数,但这些函数背后的思想过程可能会移植到其他地方。由于您没有建议使用工具,我将直接在命令行中使用ImageMagick,因为它安装在大多数Linux发行版上,可用于OSX和Windows。它还包含PHP、Perl、,Python和.Net绑定 因此,由于您的背景是统一的(ish),您可以使用
trim
将其修剪掉:
convert image.jpg -fuzz 20% -trim result.jpg
现在,您可以添加如下边框:
convert result.jpg -bordercolor black -border 5 result.jpg
convert image.jpg -fuzz 20% -format %@ info:
81x22+1+14
除非您希望保留其他灰色背景,这样对您不起作用。因此,我们可以询问ImageMagick它“将”修剪的位置,而不是实际这样做:
convert result.jpg -bordercolor black -border 5 result.jpg
convert image.jpg -fuzz 20% -format %@ info:
81x22+1+14
因此,我们知道它将制作一个81x22px的长方体,从左侧开始1个像素,从顶部开始14个像素,因此我们将在那里绘制一个矩形,而不是修剪它:
convert image.jpg -fill none -stroke black -draw "rectangle 1,14 82,36" result.jpg
或者,如果您希望轮廓更丰满:
convert image.jpg -fill none -stroke black -strokewidth 5 -draw "rectangle 1,14 82,36" result.jpg
实际上,我想在图1中的文本周围画一个边界框,如图2所示。你不应该在回答中提问-你有解决方案吗?阅读你发布的链接。相应地编辑我的回答。全新的堆栈溢出,因此感谢你为我指出了正确的方向。本打算在最后一个co中标记@hichris123mmentm使用可视化学习不需要真正编写任何代码。您只需在
命令提示符下的开始->程序->附件下键入这两行代码即可。