课程来源: B站 OpenCV4 C++ 快速入门视频30讲
目录
第一节课 OpenCV4.5.1环境配置和搭建
Visual Studio 2017 pro + OpenCV 4.5.1
环境跟着视频做就可以搭好。
要注意的是每次新建一个项目的时候要调为Release x64.
(下载了一个有用的解压软件7-zip)
第二节课 图像读取与显示
imread 读取图像
使用格式:imread(path, color)
color:IMREAD_GRAYSCALE 灰度,默认彩色
imshow 显示图像
使用格式:imshow(name, data)
data:数据对象
namedWindow 窗口
使用格式:namedWindow(name, pattern)
pattern: WINDOW_FREERATIO 调节窗口大小,可以显示全部图片
WINDOW_AUTOSIZE 自动,可能不会显示全部图片
#include <opencv2\opencv.hpp>
#include <iostream>
using namespace cv;
int main(int argc, char** argv)
{
//Mat表示矩阵,是图像
Mat src = imread("E:/love/default.jpg",IMREAD_GRAYSCALE);//imread读取图像,IMREAD_GRAYSCALE灰度
if (src.empty())//若为空则输出以下
{
printf("could not load image...\n");
return -1;
}
namedWindow("input", WINDOW_FREERATIO);//调节窗口大小,可以显示全部
imshow("input", src);//imshow显示图像,input是窗口名称,src数据对象
waitKey(0);//阻塞,让图片显示
destroyAllWindows();
return 0;
}
第三节课 图像色彩空间转换
1. 色彩空间转换函数 —— cvtColor
使用格式:cvtColor(mat1, mat2, pattern)——mat1是转换前,mat2是转换后,pattern是转换方式
pattern: COLOR_BGR2GRAY = 6 彩色到灰度
COLOR_GRAY2BGR = 8 灰度到彩色
COLOR_BGR2HSV = 40 BGR到HSV
COLOR_HSV2BGR = 54 HSV到BGR
HSV:色调(H),饱和度(S),明度(V)
2. 图像保存 —— imwrite
使用格式:imwrite(path, data)
void QuickDemo::colorSpace_Demo(Mat &image) {
Mat gray, hsv;
cvtColor(image, hsv, COLOR_BGR2HSV);
cvtColor(image, gray, COLOR_BGR2GRAY);
imshow("HSV", hsv);
imshow("灰度", gray);
imwrite("E:/love/default_hsv.png", hsv);
imwrite("E:/love/default_gray.png", gray);
}
效果:
第四节课 图像对象的创建与赋值
C++中Mat对象的创建
Python中Numpy数组对象
CV_8UC3:8表示8位 U表示无符号 C表示char类型 3表示通道数
//创建方法——克隆
Mat m1 = src.clone();
//复制
Mat m2;
src.copyTo(m2);
//赋值法
Mat m3 = src;
//创建空白图像
Mat m4 = Mat::zeros(src.size(), src.type());
Mat m5 = Mat::zeros(Size(512, 512), CV_8UC3);
Mat m6 = Mat::ones(Size(512, 512),CV_8UC3);
Mat kernel = (Mat_<char>(3, 3) << 0,-1,0,
-1,5,-1,
0,-1,0);
E.G.
Mat m3 = Mat::zeros(Size(8, 8), CV_8UC1);
//cv_8uc1 8表示8位 u表示无符号 c表示char 1表示通道数
std::cout << "width:" << m3.cols << " height:" << m3.rows << " channels:" << m3.channels() << std::endl;
std::cout << m3 << std::endl;
Mat m3 = Mat::zeros(Size(7, 8), CV_8UC3);
//cv_8uc1 8表示8位 u表示无符号 c表示char 3表示通道数
std::cout << "width:" << m3.cols << " height:" << m3.rows << " channels:" << m3.channels() << std::endl;
std::cout << m3 << std::endl;
显示全蓝色图片的代码段:
Mat m3 = Mat::zeros(Size(400, 400), CV_8UC3);
//cv_8uc3 8表示8位 u表示无符号 c表示char 3表示通道数
//zeros 零
//ones 一 给第一个通道赋值
//Scalar给三个通道赋值,未赋值就是0
m3 = Scalar(255,0,0);
std::cout << "width:" << m3.cols << " height:" << m3.rows << " channels:" << m3.channels() << std::endl;
std::cout << m3 << std::endl;
imshow("mine", m3);
注意:
Mat m4=m3;
此时m4就是m3,改变m4则m3也会随之改变。
Mat m4=m3.clone();/copyTo
此时改变m4而m3不会改变。