绿布原图
抠图后的图片
#include#include #include #include #include using namespace cv; using namespace std; int main() { //1、设置需要去除的颜色 //2、颜色比对 //3、展示效果 //只有png有透明度空间,jpg是没有透明度空间的 Mat srcImg = imread("E:/img/lvbu.jpg", -1); cout << srcImg.channels() << endl; Vec3b color(0, 255, 0); //绿色 //int tempr = 0; int tempc = 0; //先把图片放大,做完抠图后再缩小。 Mat temp; //转换图片,增加透明区域 cvtColor(srcImg, temp, COLOR_RGB2BGRA); for (int i = 0; i < srcImg.rows; ++i) { for (int j = 0; j < srcImg.cols; ++j) { Vec3b &pixel = srcImg.at (i, j); Vec4b &pixel_temp = temp.at (i, j); if (pixel[0] <= 30 && pixel[1] >= 210 && pixel[2] <= 30) { tempc = j + 1; //把符合要求的下一个点也抠掉 pixel_temp[3] = 0; //pixel[0] = 255; //pixel[1] = 255; //pixel[2] = 255; } else if (tempc == j - 1) { pixel_temp[3] = 0; } } } imshow("result", temp); imwrite("E:/img/result.png", temp); waitKey(0); return 0; }



