无法将图像保存为白色背景 OpenCV 的 JPG
Can't save image in JPG with white background OpenCV
我在 OpenCV 中编写了一个简单的应用程序,用于删除图像的黑色背景并将其保存为 JPG 的白色背景。但是,它始终以黑色背景保存。
这是我的代码:
Mat Imgsrc = imread("../temp/temp1.jpg",1) ;
mat dest;
Mat temp, thr;
cvtColor(Imgsrc, temp, COLOR_BGR2GRAY);
threshold(temp,thr, 0, 255, THRESH_BINARY);
Mat rgb[3];
split(Imgsrc,rgb);
Mat rgba[4] = { rgb[0],rgb[1],rgb[2],thr };
merge(rgba,4,dest);
imwrite("../temp/r5.jpg", dest);
您可以简单地使用 setTo
和掩码来根据掩码将一些像素设置为特定值:
Mat src = imread("../temp/temp1.jpg",1) ;
Mat dst;
Mat gray, thr;
cvtColor(src, gray, COLOR_BGR2GRAY);
// Are you sure to use 0 as threshold value?
threshold(gray, thr, 0, 255, THRESH_BINARY);
// Clone src into dst
dst = src.clone();
// Set to white all pixels that are not zero in the mask
dst.setTo(Scalar(255,255,255) /*white*/, thr);
imwrite("../temp/r5.jpg", dst);
还有一些注意事项:
您可以使用以下方法直接加载灰度图像:imread(..., IMREAD_GRAYSCALE);
您可以避免使用所有这些临时 Mat
s。
- 您确定要使用
0
作为阈值吗?因为在这种情况下,您可以完全避免应用 theshold
,并将灰度图像中为 0 的所有像素设置为白色:dst.setTo(Scalar(255,255,255), gray == 0)
;
我会这样做:
// Load the image
Mat src = imread("path/to/img", IMREAD_COLOR);
// Convert to grayscale
Mat gray;
cvtColor(src, gray, COLOR_BGR2GRAY);
// Set to white all pixels that are 0 in the grayscale image
src.setTo(Scalar(255,255,255), gray == 0)
// Save
imwrite("path/to/other/img", src);
我在 OpenCV 中编写了一个简单的应用程序,用于删除图像的黑色背景并将其保存为 JPG 的白色背景。但是,它始终以黑色背景保存。
这是我的代码:
Mat Imgsrc = imread("../temp/temp1.jpg",1) ;
mat dest;
Mat temp, thr;
cvtColor(Imgsrc, temp, COLOR_BGR2GRAY);
threshold(temp,thr, 0, 255, THRESH_BINARY);
Mat rgb[3];
split(Imgsrc,rgb);
Mat rgba[4] = { rgb[0],rgb[1],rgb[2],thr };
merge(rgba,4,dest);
imwrite("../temp/r5.jpg", dest);
您可以简单地使用 setTo
和掩码来根据掩码将一些像素设置为特定值:
Mat src = imread("../temp/temp1.jpg",1) ;
Mat dst;
Mat gray, thr;
cvtColor(src, gray, COLOR_BGR2GRAY);
// Are you sure to use 0 as threshold value?
threshold(gray, thr, 0, 255, THRESH_BINARY);
// Clone src into dst
dst = src.clone();
// Set to white all pixels that are not zero in the mask
dst.setTo(Scalar(255,255,255) /*white*/, thr);
imwrite("../temp/r5.jpg", dst);
还有一些注意事项:
您可以使用以下方法直接加载灰度图像:
imread(..., IMREAD_GRAYSCALE);
您可以避免使用所有这些临时
Mat
s。- 您确定要使用
0
作为阈值吗?因为在这种情况下,您可以完全避免应用theshold
,并将灰度图像中为 0 的所有像素设置为白色:dst.setTo(Scalar(255,255,255), gray == 0)
;
我会这样做:
// Load the image
Mat src = imread("path/to/img", IMREAD_COLOR);
// Convert to grayscale
Mat gray;
cvtColor(src, gray, COLOR_BGR2GRAY);
// Set to white all pixels that are 0 in the grayscale image
src.setTo(Scalar(255,255,255), gray == 0)
// Save
imwrite("path/to/other/img", src);