从图像中删除黑色背景。
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
【讨论】:
以上是关于从图像中删除黑色背景。的主要内容,如果未能解决你的问题,请参考以下文章