文章目录
一、图像操作
1.显示图片
imread()
#include<opencv2/opencv.hpp>
using namespace cv;
int main()
{
Mat img=imread("1.jpg");
imshow("[Origin]",img);
waitKey(0);
return 0;
}
2.图像叠加
ROI:Rect(),copyTo()
https://blog.csdn.net/sandalphon4869/article/details/94565827
(1)简单叠加
#include<opencv2/opencv.hpp>
using namespace cv;
int main()
{
Mat A=imread("3.jpg");
Mat ROI=A(Rect(0,0,100,100));
Mat B=imread("5.jpg");
B.copyTo(ROI);
imshow("A-changed",A);
waitKey(0);
return 0;
}
(2)掩膜叠加
#include<opencv2/opencv.hpp>
using namespace cv;
int main()
{
Mat backImage=imread("3.jpg");
Mat logoImage=imread("5.jpg");
Mat ROI=backImage(Rect(0,0,logoImage.cols,logoImage.rows));
//ROI
Mat mask=imread("5.jpg",0);
//mask要读取灰度图
logoImage.copyTo(ROI,mask);
//使用双参数的重载函数
imshow("Effect",backImage);
waitKey();
return 0;
}
3.图像线性混合
addWeighted():https://blog.csdn.net/sandalphon4869/article/details/94436666#1addWeighted_333
(1)整体
#include<opencv2/opencv.hpp>
using namespace cv;
int main()
{
Mat backImage=imread("11.jpg");
Mat logoImage=imread("12.jpg");
Mat dstImage;
addWeighted(backImage,0.5,logoImage,0.5,0.0,dstImage);
imshow("11.jpg",backImage);
imshow("12.jpg",logoImage);
imshow("Effect",dstImage);
waitKey();
return 0;
}
(2)局部
#include<opencv2/opencv.hpp>
using namespace cv;
int main()
{
Mat backImage=imread("12.jpg");
Mat logoImage=imread("5.jpg");
Mat ROI=backImage(Rect(0,0,logoImage.cols,logoImage.rows));
addWeighted(ROI,0.5,logoImage,0.3,0.0,ROI);
imshow("Effect",backImage);
waitKey();
return 0;
}
2.图像形态学运算(腐蚀、膨胀等)
getStructuringElement()
morphologyEx()
https://blog.csdn.net/sandalphon4869/article/details/94576278#morphologyEx_144
如:腐蚀
#include<opencv2/opencv.hpp>
using namespace cv;
int main()
{
Mat srcImage=imread("1.jpg");
imshow("[Orignin]",srcImage);
Mat kernel=getStructuringElement(MORPH_RECT,Size(15,15));
Mat dstImage;
morphologyEx(srcImage,dstImage,MORPH_ERODE,kernel);
imshow("[Effect]",dstImage);
waitKey(0);
return 0;
}
3.图像模糊
#include<opencv2/opencv.hpp>
using namespace cv;
int main()
{
Mat srcImage=imread("1.jpg");
imshow("[Origin]",srcImage);
Mat dstImage;
blur(srcImage,dstImage,Size(7,7));
imshow("[Effect]",dstImage);
waitKey(0);
return 0;
}
4.Canny边缘检测
#include<opencv2/opencv.hpp>
using namespace cv;
int main()
{
Mat srcImage=imread("1.jpg");
imshow("[Origin]",srcImage);
Mat dstImage,edge,grayImage;
dstImage.create(srcImage.size(),srcImage.type());
cvtColor(srcImage,grayImage,COLOR_BGR2GRAY);
blur(grayImage,edge,Size(7,7));
Canny(edge,edge,3,9,3);
imshow("[Effect]",edge);
waitKey(0);
return 0;
}
二、视频操作
1.读视频
#include<opencv2/opencv.hpp>
using namespace cv;
int main()
{
VideoCapture capture("1.avi");
while(1)
{
Mat frame;
capture>>frame;
imshow("[Video]",frame);
//注意视频循环中必须waitKey(ms),否则报错
waitKey(30);
}
return 0;
}
2.捕获摄像头
#include<opencv2/opencv.hpp>
using namespace cv;
int main()
{
VideoCapture capture(0);
while(1)
{
Mat frame;
capture>>frame;
imshow("[Video]",frame);
waitKey(30);
}
return 0;
}
3.捕获摄像头+Canny边缘检测
#include<opencv2/opencv.hpp>
using namespace cv;
int main()
{
VideoCapture capture(0);
while(1)
{
Mat frame,edge;
capture>>frame;
cvtColor(frame,edge,CV_BGR2GRAY);
blur(edge,edge,Size(7,7));
Canny(edge,edge,0,30,3);
imshow("[Vedio]",edge);
if(waitKey(30)>=0) break;
}
return 0;
}
三、书籍
链接:https://pan.baidu.com/s/1E03YkYG2pXO5u7hJj3AWaQ
提取码:xipd