图层混合
//mix.cpp:图像mix // #include"stdafx.h" #include<iostream> #include"opencv2/core/core.hpp" #include"opencv2/highgui/highgui.hpp" #include"opencv2/imgproc/imgproc.hpp" usingnamespacestd; usingnamespacecv; //Multiply正片叠底 voidMultiply(Mat&src1,Mat&src2,Mat&dst) { for(intindex_row=0;index_row<src1.rows;index_row++) { for(intindex_col=0;index_col<src1.cols;index_col++) { for(intindex_c=0;index_c<3;index_c++) dst.at<Vec3f>(index_row,index_col)[index_c]= src1.at<Vec3f>(index_row,index_col)[index_c]* src2.at<Vec3f>(index_row,index_col)[index_c]; } } } //Color_Burn颜色加深 voidColor_Burn(Mat&src1,Mat&src2,Mat&dst) { for(intindex_row=0;index_row<src1.rows;index_row++) { for(intindex_col=0;index_col<src1.cols;index_col++) { for(intindex_c=0;index_c<3;index_c++) dst.at<Vec3f>(index_row,index_col)[index_c]=1- (1-src1.at<Vec3f>(index_row,index_col)[index_c])/ src2.at<Vec3f>(index_row,index_col)[index_c]; } } } //线性增强 voidLinear_Burn(Mat&src1,Mat&src2,Mat&dst) { for(intindex_row=0;index_row<src1.rows;index_row++) { for(intindex_col=0;index_col<src1.cols;index_col++) { for(intindex_c=0;index_c<3;index_c++) dst.at<Vec3f>(index_row,index_col)[index_c]=max( src1.at<Vec3f>(index_row,index_col)[index_c]+ src2.at<Vec3f>(index_row,index_col)[index_c]-1,(float)0.0); } } } int_tmain(intargc,_TCHAR*argv[]) { //首先做灰度的mix Matsrc=imread("1.jpg"); Matmask=imread("mask2.jpg"); MatmaskF(src.size(),CV_32FC3); MatsrcF(src.size(),CV_32FC3); MatdstF(src.size(),CV_32FC3); src.convertTo(srcF,CV_32FC3); mask.convertTo(maskF,CV_32FC3); srcF=srcF/255; maskF=maskF/255; Matdst(srcF); //正片叠底 Multiply(srcF,maskF,dstF); dstF=dstF*255; dstF.convertTo(dst,CV_8UC3); imwrite("正片叠底.jpg",dst); //Color_Burn颜色加深 Color_Burn(srcF,maskF,dstF); dstF=dstF*255; dstF.convertTo(dst,CV_8UC3); imwrite("颜色加深.jpg",dst); //线性增强 Linear_Burn(srcF,maskF,dstF); dstF=dstF*255; dstF.convertTo(dst,CV_8UC3); imwrite("线性增强.jpg",dst); waitKey(); return0; } 来自为知笔记(Wiz) 目前方向:图像拼接融合、图像识别 联系方式:jsxyhelu@foxmail.com