Makefile文件:
CXX ?= g++
CXXFLAGS += -c -Wall $(shell pkg-config --cflags opencv)
LDFLAGS += $(shell pkg-config --libs --static opencv)
all: picture_mixed
picture_mixed: picture_mixed.o; $(CXX) $< -o $@ $(LDFLAGS)
%.o: %.cpp; $(CXX) $< -o $@ $(CXXFLAGS)
clean: ; rm -f picture_mixed.o picture_mixed
图像混合程序:
#include <opencv2/opencv.hpp>#include <iostream>#define WINDOW_NAME "图像混合示例"using namespace std;using namespace cv;int g_nMaxValue = 100;int g_nValueSlider = 50;double alpha;double belta;Mat srcImg1;Mat srcImg2;Mat dstImg;//图像混合与显示函数void alphaValueChange(int,void *){ alpha = (double)g_nValueSlider/g_nMaxValue; belta = (1 - alpha); addWeighted(srcImg1,alpha,srcImg2,belta,0.0,dstImg); imshow(WINDOW_NAME,dstImg);}int main(int argc,char *argv[]){ if(argc!=3) { cout<<"input error"<<endl; return 0; } int max_col,max_row; //读取两幅图像 srcImg1 = imread(argv[1]); srcImg2 = imread(argv[2]); if(!srcImg1.data||!srcImg2.data) { cout<<"the picture is empty!"<<endl; return -1; } //改变图像的大小 if(srcImg1.rows>srcImg2.rows) max_row = srcImg1.rows; else max_row = srcImg2.rows; if(srcImg1.cols>srcImg1.cols) max_col = srcImg1.cols; else max_col = srcImg2.cols; resize(srcImg1,srcImg1,Size(max_row,max_col)); resize(srcImg2,srcImg2,Size(max_row,max_col)); namedWindow(WINDOW_NAME); createTrackbar("Mixed",WINDOW_NAME,&g_nValueSlider,g_nMaxValue,alphaValueChange); alphaValueChange(0,0); waitKey(0); return 0;}
原图:
alpha=0.5的混合图像: