这是一篇OpenCv4 C++版本入门的个人笔记,是B站课程30讲的部分笔记。代码中创建一个QuickDemo类,类中的每一个公有成员函数对应一个知识点。
分别有:1、将原图转为HSV和GRAY图像显示并保存;2、进行像素操作,加减乘除;3、滚动条调整亮度;4、键盘输入响应;5、改变图像颜色风格;6、像素逻辑运算;7、通道分离与合并;8、图像色彩空间转换;9、图像像素统计,最大最小值,均值方差;10、在图像中绘制几何图形;11、绘制多边形;12、鼠标响应,绘制矩形;13、像素类型转换与归一化;14、图像放缩;15、图像翻转;16、图像旋转;17、调用摄像头。
具体程序代码:
main.cpp
// test.cpp : 此文件包含 "main" 函数。程序执行将在此处开始并结束。
//
#include <iostream>
#include <opencv2\opencv.hpp>
#include "quickopencv.h"
using namespace std;
using namespace cv;
Mat img;
int main(int argc,char** argv)
{
img = imread("D:/exercise/opencv4/dog.jpeg");// 图像色彩空间转换用pig.jpg
if (img.empty())
{
cout << "请确认图像名称是否正确!" << endl;
return -1;
}
namedWindow("Original drawing", WINDOW_FREERATIO);
imshow("Original drawing", img);
QuickDemo qd;
//qd.colorSpace_Demo(img);//将原图转为HSV和GRAY图像显示并保存
//qd.operator_demo(img);//进行像素操作
//qd.teacking_bar_demo(img);//滚动条调整亮度
//qd.key_demo(img);//键盘输入响应
//qd.color_style_demo(img);//改变图像颜色风格
//qd.bitwise_demo(img);//图像像素逻辑操作
//qd.channels_demo(img);//图像分离与合并
//qd.inrange_demo(img); // 图像色彩空间转换
//qd.pixel_static_demo(img);//图像像素统计,最大最小值,均值方差
//qd.drawing_demo(img);//在图像中绘制几何图形
//qd.polyline_drawing_demo();//绘制多边形
//qd.mouse_drawing(img);使用鼠标绘制矩形
//qd.norm_demo(img);//像素类型转换与归一化
//qd.resize_demo(img);//图像放缩
//qd.flip_demo(img);//图像翻转
//qd.rotate_demo(img);//图像旋转
qd.video_demo(img);//使用摄像头
waitKey(0);
}
(注意:图片路径根据具体实际进行导入),可逐个调用各个类成员函数,进行OpenCv的学习。
quickopencv.cpp
#include "quickopencv.h"
#include <vector>
void QuickDemo::colorSpace_Demo(Mat& image)
{
Mat gray, hsv;
cvtColor(image, hsv, COLOR_BGR2HSV);//HSV分别表示色度、饱和度和亮度
cvtColor(image, gray, COLOR_BGR2GRAY);
imshow("HSV drawing", hsv);
imshow("GRAY drawing", gray);
imwrite("D:/exercise/opencv4/HSVdog.jpeg", hsv);
imwrite("D:/exercise/opencv4/GRAYdog.jpeg", gray);
}
void QuickDemo::operator_demo(Mat& image)
{
//加减乘除可以用,add()、subtract()、multiply()、divide()
Mat dst;
dst = image + Scalar(50, 50, 50);//这种情况下,对每个像素进行操作,像素值超过255会截断,值就为255
imshow("加法操作",dst);//减法同理,在这不做展示了
dst = image / Scalar(2, 2, 2);
imshow("除法操作", dst);
multiply(image, Scalar(2, 2, 2), dst);
imshow("乘法操作", dst);//乘法,像素值超过255会截断,值就为255
}
//滑动条改变图像亮度--------------------------------------------------------------
int lightness;