图像需放在工程内的解决方案文件夹内,或者在读取的时候使用绝对路径如D:\code\CV\CV\1.png
#include<iostream>
#include<opencv2/opencv.hpp>
using namespace cv;
void main()
{
Mat x = imread("1.png");
imshow("1", x);
waitKey(0);
}
using namespace cv
使用命名空间cv。其后的函数imread和imshow都是在cv内。
imread(“图像路径”,a):
a=1,读入彩色图像(默认)
a=0,读入灰度图像
waitKey(0)
无限延时,直到按下
waitKey(1000)
延时1000ms
imshow(“窗口内容”,图像矩阵)
void main()
{
Mat x(300,200,CV_8UC3,Scalar(0,0,255));
imshow("1", x);
waitKey(0);
}
此代码,初始化一个300行,200列的三维矩阵。由于Opencv中像素的默认存储方式是BGR,故Scalar(0,0,255)表示的是R=255,G=0,B=0的像素,矩阵的所有像素都是它。故最终结果是一副全红图像
Mat::Mat(int rows, int cols, int type, const Scalar& s)
创建行数为 rows,列数为 col,类型为 type 的图像,并将所有元素初始
化为值s。
CV_8UC3
8U——8位无符号整形
C3——3通道图像
Mat roi = img(Rect(距左, 距上, 宽, 高));
用Rect进行图像裁剪
#include<iostream>
#include<opencv2/opencv.hpp>
#include<opencv2/highgui/highgui.hpp>
using namespace cv;
void main()
{
Mat logo=imread("2.png");
Mat img = imread("1.png");
Mat roi = img(Rect(100, 200, 150, 150));
addWeighted(roi, 0.5, logo, 0.5,1,roi);
imshow("3", img);
waitKey(0);
}
知识点:opencv中,不同的Mat变量会共用同一个图像矩阵。
addWeighted(roi, 0.5, logo, 0.5,1,roi)
addWeighted只能进行同样尺寸的图像融合
第一个roi和logo,及2个0.5,表示要融合图像矩阵及其权重。
而roi表示的是大图中的一个小区域,由于roi和img共用图像矩阵,所以对roi操作实际就是操作了img中的那一小块,这就可以实现用addWeighted对不同大小的图像融合。