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,这可能类似于:

  • 使用“查找”来标识非背景像素(例如linearIndices=find(~(image1==background)),其中背景是对应于背景像素的一组硬编码RGB值或由图像模式标识的一组RGB值
  • “Find”将返回线性索引而不是下标(即3x3矩阵的右下角为9,而不是[3,3]),因此使用“”将其转换为下标(例如[i,J]=ind2sub(图像大小,linearindice)
  • 使用“max”和“min”查找x和y中的范围(例如,rangeX=[min(I)max(I);rangeY=[min(J)max(J)])
  • 将沿最小和最大索引的像素更改为边框颜色。例如,image1(rangeX(1)、rangeY(1):rangeY(2))=BoxColor(其中BoxColor是您希望框显示的颜色的RGB值)将绘制框的左边框。对其他三个边框重复此过程,就完成了
  • 当然,这种方法只有在背景完全一致的情况下才有效。它还假设您只想绘制一个像素厚的边界。
    虽然函数建议专门对应于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使用可视化学习不需要真正编写任何代码。您只需在
    命令提示符下的
    开始
    ->
    程序
    ->
    附件下键入这两行代码即可。