[VS2017]图像处理——给证件照换背景

本次做的是一个关于图像处理的小代码,把之前大佬们分享的利用图像处理的方法,给肖像换背景复现了一遍~
这里是VS源码

#include 
#include 
#include using namespace cv;
using namespace std;int main(int argc, char** argv) {Mat img, img2, img3, img4, img5, img6;img = imread("11.jpg");//resize(img, img, Point(221, 316));imshow("input image", img);int rows, cols, channels;rows = img.rows;cols = img.cols;channels = img.channels();//cout << rows << "\t" << cols << "\t" << channels << endl;cvtColor(img, img2, COLOR_BGR2HSV);//imshow("hsv image", img2);inRange(img2, Scalar(0, 135, 135), Scalar(180, 245, 230), img3);//检测红色背景//inRange(img2, Scalar(90, 70, 70), Scalar(110, 255, 255), img3);//检测蓝色背景imshow("mask image", img3);//腐蚀Mat element = getStructuringElement(MORPH_RECT, Size(3, 3));erode(img3, img4, element);imshow("erode image", img4);//膨胀dilate(img4, img5, element);imshow("dilate image", img5);//遍历换颜色Mat ergodic_img = img5;int pointR, pointG, pointB;for (int i = 0; i < ergodic_img.rows; i++){for (int j = 0; j < ergodic_img.cols ; j++){if (ergodic_img.at(i, j) == 255){//pointR = 67, pointG = 142, pointB = 219;//背景变为蓝色//pointR = 255, pointG = 0, pointB = 0; //背景变为红色pointR = 255, pointG = 255, pointB = 255;//背景变为白色img.at<cv::Vec3b>(i, j)[0] = pointB;img.at<cv::Vec3b>(i, j)[1] = pointG;img.at<cv::Vec3b>(i, j)[2] = pointR;}}}imshow("result image", img);imwrite("result.jpg", img);waitKey(0);return 0;
}

处理各流程照片:
处理的各个流程图
输入图像:
在这里插入图片描述
输出图像:
在这里插入图片描述


本文来自互联网用户投稿,文章观点仅代表作者本人,不代表本站立场,不承担相关法律责任。如若转载,请注明出处。 如若内容造成侵权/违法违规/事实不符,请点击【内容举报】进行投诉反馈!

相关文章

立即
投稿

微信公众账号

微信扫一扫加关注

返回
顶部