#include <opencv2/opencv.hpp>
#include <iostream>
#include <opencv2/highgui/highgui_c.h>
using namespace std;
using namespace cv;
//圖檔重疊
int main(int argc, char** argv)
{
Mat src, src1, src2, dst2;
src1 = imread("F:/TestImage/emoji1.jpg");
src2 = imread("F:/TestImage/emoji1.jpg");
//在這因為沒找到大小相同的圖檔,是以最後還是用一張圖檔來做......
if (src1.empty())
{
cout << "could not load image 1 ..." << endl;
return -1;
}
if (src2.empty())
{
cout << "could not load image 2 ..." << endl;
return -1;
}
/*int height = src2.rows;
int width = src2.cols;
for (int row = 0; row < height; row++)
{
for (int col = 0; col < width; col++)
{
int gray = src2.at<uchar>(row, col);
src2.at<uchar>(row, col) = 255 - gray;
}
}*/
Mat dst;
int height = src2.rows;
int width = src2.cols;
dst.create(src2.size(), src2.type());
height = src2.rows;
width = src2.cols;
int nc = src2.channels();
//這個地方用255-圖像像素強度值,得到的圖像在接下來的進行中,由于兩個圖檔強度值相加會大于255,圖檔會出現加載不出來的情況
//是這樣嗎
for (int row = 0; row < height; row++)
{
for (int col = 0; col < width; col++)
{
if (nc == 1) {
int gray = src2.at<uchar>(row, col);
src2.at<uchar>(row, col) = 255 - gray;
}
else if (nc == 3)
{
int b = src2.at<Vec3b>(row, col)[0];
int g = src2.at<Vec3b>(row, col)[1];
int r = src2.at<Vec3b>(row, col)[2];
dst.at<Vec3b>(row, col)[0] = 255 - b;
dst.at<Vec3b>(row, col)[1] = 255 - g;
dst.at<Vec3b>(row, col)[2] = 255 - r;
//gray_src.at<uchar>(row, col) = min(r, min(b, g));
}
}
}
double alpha = 0.5;
if (src1.rows == src2.rows && src1.cols == src2.cols && src1.type() == src2.type())
{
addWeighted(src1, alpha, dst, (1.0 - alpha), 20, dst2);
imshow("笑", src1);
imshow("啊", dst);
namedWindow("blend demo", CV_WINDOW_AUTOSIZE);
imshow("blend demo", dst2);
}
else
{
printf("could not blend image,the size of image is not same...\n");
return -1;
}
/*namedWindow("input", CV_WINDOW_AUTOSIZE);
imshow("input", src);*/
waitKey(0);
return 0;
}
addWeighted()函數(copy的) :
addWeighted()函數是将兩張相同大小,相同類型的圖檔融合的函數。
void cvAddWeighted( const CvArr* src1, double alpha,const CvArr* src2, double beta,double gamma, CvArr* dst );
參數1:src1,第一個原數組.
參數2:alpha,第一個數組元素權重
參數3:src2第二個原數組
參數4:beta,第二個數組元素權重
參數5:gamma,圖1與圖2作和後添加的數值。不要太大,不然圖檔一片白。總和等于255以上就是純白色了。
參數6:dst,輸出圖檔
提問:
RGB值超出255會出現什麼情況?是純白色嗎?為什麼會出現灰色的圖檔?