从图像中删除黑色背景。

Posted

技术标签:

【中文标题】从图像中删除黑色背景。【英文标题】:Remove black Background from an image. 【发布时间】:2016-12-08 10:16:56 【问题描述】:

我是图像处理和开发的新手。我用过opencv,我需要从给定的图像中提取圆圈。给定 x, y 坐标的那个圆是 Oder 中的(半径),我使用以下代码来做到这一点。但我的问题是我必须采用黑色矩形。因此图像补丁具有不需要的黑色像素。如何只保存圈子?

我的代码

double save_key_points(Mat3b img, double x, double y, double radius, string 

    filename, string foldername)
    

        // print image height and width first and check.
        Vec3f circ(x, y, radius);

// Draw the mask: white circle on black background
Mat1b mask(img.size(), uchar(0));

circle(mask, Point(circ[0], circ[1]), circ[2], Scalar(255), CV_FILLED);


// Compute the bounding box
Rect bbox(circ[0] - circ[2], circ[1] - circ[2], 2 * circ[2], 2 * circ[2]);

// Create a black image
Mat3b res(img.size(), Vec3b(0, 0, 0));

// Copy only the image under the white circle to black image
img.copyTo(res, mask);

// Crop according to the roi
res = res(bbox);

//remove black but doesn't work.
Mat tmp, alpha;
threshold(res, alpha, 100, 255, THRESH_BINARY);
        // Save the image
        string path = "C:\\Users\\bb\\Desktop\\test_results\\test_case8\\" + foldername + filename + ".png";

        imwrite(path, res);
        Mat keypointimg = imread(path, CV_LOAD_IMAGE_GRAYSCALE);

        //print the cordinate of one patch.
        cordinate_print(keypointimg, radius);

      

(这里我想要没有黑色背景)

【问题讨论】:

你的问题不太清楚。从您的代码中了解到,您有中心(x,y)和圆半径,并且您正在创建一个黑色图像。要删除黑色部分,您可以将图像更改为 BGRA,并且对于具有值 (0,0,0) 的每个像素设置 alpha = 0;但是裁剪图像有什么意义呢?? 如果我理解正确,img.copyTo(res, mask); 只会将蒙版区域(即圆形)复制到目标图像。首先用 aplha 创建目标黑色图像不是一个选项吗?即:而不是Mat3b res(img.size(), Vec3b(0, 0, 0));Mat4b res(img.size(), Vec4b(0, 0, 0, 0)); 之类的东西创建它? @Steeve 如果我使用 Mat4b res(img.size(), Vec4b(0, 0, 0, 0)); opencvtest.exe 中 0x00007FFF884F7788 处发生未处理的异常,异常是 OpenCV 错误:断言失败 (CV_MAT_TYPE(mtype) == m.type()) in cv::_OutputArray::create,文件 C:\builds\2_4_PackSlave-win64-vc12- 【参考方案1】:

如果我理解您的要求正确,您可以从图像中移除黑色,您可以使用蒙版。面具可以突出任何具有某种颜色的东西,或者在你的情况下是黑色的阴影。查看此实现的链接,看看它是否是您正在寻找的。它在 python 中,但很容易适应。

Image Filtering

【讨论】:

以上是关于从图像中删除黑色背景。的主要内容,如果未能解决你的问题,请参考以下文章

从警报对话框中删除黑色背景 - Android

从彩色背景中提取黑色对象

从黑色背景OpenCV C++中提取对象

imagemagick - 具有静态黑色背景的动画?

将矩形图像调整为正方形,保持比例并用黑色填充背景

使用gd在php中调整图像大小后的黑色背景