【visual studio】opencv c++学习记录

本文详细介绍了OpenCV库在图像处理中的应用,包括读取和显示图片、视频处理、摄像头操作、灰度图像、高斯模糊、Canny边缘检测、膨胀侵蚀、图像缩放与裁剪、图像绘图、图像扭曲、颜色检测、轮廓检测与形状识别,以及人脸识别。通过实例代码展示了每个操作的具体实现,帮助读者深入理解OpenCV的基本和高级功能。
摘要由CSDN通过智能技术生成

目录

头文件

chapter1(图片)

cnapter2(视频)

chapter3(摄像头)

chapter 4(灰度)

chapter 5(高斯模糊)

chapter 6(canny函数--边缘检测)+膨胀侵蚀 

 chapter 7(改变图片大小+裁剪)

 chapter 8(绘图)

颜色参数:

chapter 9(图像扭曲)

在四角画点

chapter 10(颜色检测 color dectection)

chapter 11(形状、轮廓检测)

获得轮廓:

Vector


图片来源: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(改变图片大小+裁剪)

下图为缩小后。

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值