目录
chapter 10(颜色检测 color dectection)
图片来源:lofter-- (翻了半天喜欢发现找不到作者了)
头文件
#include<opencv2/imgcodecs.hpp>
#include<opencv2/highgui.hpp>
#include<opencv2/imgproc.hpp>
#include<iostream>
using namespace cv;
using namespace std;
使用vector时和人脸识别应用到:
#include<vector>
#include<opencv2/objdetect>
chapter1(图片)
string path = "libai.jpg"; //路径
Mat img = imread(path); //图片名称,imread()--读取
imshow("image", img); //imshow(name,变量)--输出
waitKey(0); //延迟,0时为静止
return 0;
我将图片libai.jpg放在文件资源管理文件夹内,所以可以直接输出名字,但当试图输出本地文件时,会出现错误,仍在尝试中
cnapter2(视频)
void main() {
string path = "file/rm.mp4";
VideoCapture VID(path);//有一个摄像头,VideoCapture--视频捕获
Mat img;
while (true) {
VID.read(img);
imshow("img", img);
waitKey(20); //单位为ms
}
}
chapter3(摄像头)
void main() {
VideoCapture VID(0);//摄像头
Mat img;
while (true) {
VID.read(img);
imshow("img", img);
waitKey(1);
}
}
当VideoCapture VID(1)时,报错为:
异常:0x00007FF860474008 处(位于 Project2.exe 中)有未经处理的异常: Microsoft C++ 异常: cv::Exception,位于内存位置 0x000000C58157F320 处。
解析: 1为多个摄像头,0为一个,我只有一个摄像头所以应该是0.
chapter 4(灰度)
void main() {
string path = "file/libai.jpg";
Mat img = imread(path);
Mat imggray; //定义灰度图像变量
cvtColor(img, imggray, COLOR_BGR2GRAY);
//imshow("img", img);
imshow("gray", imggray);
waitKey(0);
}
cvtColor()用于将图像从一个颜色空间转换到另一个颜色空间的转换,并且在转换的过程中能够保证数据的类型不变,即转换后的图像的数据类型和位深与源图像一致。
格式为cvtColor(转换前图像,转换后的数字图像,转换方式)
其中,COLOR_BGR2GRAY即将bgr(蓝绿红)图像转换成gray(灰度)图像。
chapter 5(高斯模糊)
void main() {
string path = "file/libai.jpg";
Mat img = imread(path);
Mat imgguas;
GaussianBlur(img, imgguas, Size(7, 7), 5, 5);
//imshow("img", img);
imshow("gauss", imgguas);
waitKey(0);
}
- void GaussianBlur( InputArray src,OutputArray dst,Size ksize,double sigmaX,double sigmaY = 0,int borderType = BORDER_DEFAULT )
- size值越大(),模糊度越高,x,y是标准差值。
- Size ksize:高斯卷积核的大小,是奇数
- double sigmaX, double sigmaY=0, :表示x和y方向的方差,如果y=0则y方向的方差与x相等
- int borderType=BORDER_DEFAULT :边界的处理方式,一般默认
chapter 6(canny函数--边缘检测)+膨胀侵蚀
图左:canny边缘检测结果
图右:膨胀函数(dilate)
void main() {
string path = "file/libai.jpg";
Mat img = imread(path);
Mat imgguas,imgcany,imgdil;
GaussianBlur(img, imgguas, Size(7, 7), 5, 0);
Canny(imgguas, imgcany, 30, 30); //阙值越低线条越多
Mat kerenl = getStructuringElement(MORPH_RECT, Size(3, 3)); //矩形线条,线条膨胀度最好用奇数
dilate(imgcany, imgdil, kerenl); //膨胀格式
//imshow("img", img);
imshow("gauss", imgguas);
imshow("cany", imgcany); //canny函数常与高斯模糊搭配使用
imshow("dialte", imgdil);
waitKey(0);
}
图左:侵蚀前(dilate)
图右:侵蚀后 (erode)
代码如图:
void main() {
string path = "file/libai.jpg";
Mat img = imread(path);
Mat imgguas,imgcany,imgdil,imgqs;
GaussianBlur(img, imgguas, Size(7, 7), 5, 0);
Canny(imgguas, imgcany, 30, 30); //阙值越低线条越多
Mat kerenl = getStructuringElement(MORPH_RECT, Size(3, 3)); //矩形线条,线条膨胀度最好用奇数
dilate(imgcany, imgdil, kerenl); //膨胀格式
erode(imgdil, imgqs, kerenl); //侵蚀
//imshow("img", img);
imshow("gauss", imgguas);
imshow("cany", imgcany);
imshow("dialte", imgdil);
imshow("erode", imgqs); //侵蚀
waitKey(0);
}
chapter 7(改变图片大小+裁剪)
下图为缩小后。