C++ OpenCV 把一张图藏到另外一张图中(图像加水印)
图像的像素值的范围为[0,255],8位2进制表示[00000000,11111111]
uchar 无符号8位2进制。
采用截取图像A的最后2位(2位只能表示4种可能性),用于藏图像B。涉及到C++的位操作: >> ,<< , & , | 四种操作即可。
此时的图像,有2点要求:1、被藏图像B(水印图像)较单调,像素值较集中。2、图像B尽可能保持与图像A相同尺寸。3、图像A和B竟然采用无压缩格式储存图像格式(BMP格式),其他比如JPG格式是有损压缩。
图像A,下图:
图像B,下图:
#include <opencv2/opencv.hpp>
#include <opencv2/core/core.hpp>
#include<opencv2/imgproc/imgproc.hpp>
#include <opencv2/highgui/highgui.hpp>
#include <iostream>
#include <queue>
using namespace std;
using namespace cv;
void pic_add(Mat &image, Mat &image_water)
{
cout << image.rows << " " << image.cols << " " << image.channels() << " " << image.type() << " " << endl;
cout << "image.channels() = " << image.channels() << endl;
//cout << image_water.rows << " " << image_water.co