栏目分类:
子分类:
返回
名师互学网用户登录
快速导航关闭
当前搜索
当前分类
子分类
实用工具
热门搜索
名师互学网 > IT > 软件开发 > 后端开发 > C/C++/C#

openCV (c++)

C/C++/C# 更新时间: 发布时间: IT归档 最新发布 模块sitemap 名妆网 法律咨询 聚返吧 英语巴士网 伯小乐 网商动力

openCV (c++)

openCV 配置 (C++)

课程链接:

https://www.bilibili.com/video/BV11A411T7rL/?spm_id_from=333.788

  1. 下载visual studio

  2. github 下载 opencv :

    Release->选择windows 的 .exe文件

配置环境变量: 本文将opencv放在了以下路径中:

G:github_coderepopencvbuildx64vc15bin

重启计算机

  1. 打开vs,创建c++ 工程: 并将plateform target 设置为 x64

  1. 工程配置

    • vc++ 目录:

    ​ 包含目录:G:github_coderepopencvbuildinclude

    ​ 库目录:G:github_coderepopencvbuildx64vc15lib

    • 链接器:

    输入:附加依赖项 opencv_world455d.lib (版本号从

    G:github_coderepopencvbuildx64vc15bin 可以看到)

VC++ directories:

  • 点击工程名称 -> 项目 -> 属性

  • 配置vc++ 的包含目录和库目录

  • 配置链接器以及版本号查询

  1. 测试
#include
#include
#include
#include

using namespace cv;
using namespace std;

//Images
int main() {
	string path = "Resources/test.jpg";
	Mat img = imread(path);//由Opencv 引入的矩阵数据类型
	imshow("Image", img);
	waitKey(0); // 0 :指等待事件无穷大(infinite),这样打开的图片就不会关闭
	return 0;
}

代码能够成功运行,显示图片,说明环境配置正确

chapter 1 读取图像、视频和摄像头

对于图片:由opencv引入的矩阵类型 Mat 来进行读取

对于视频:是由一系列的图片组成的,需要使用while循环读取所有的img

对于摄像头:与读取视频的方式一致,区别在于路径获取 为摄像头的编号VideoCapture cap(0); 如果只有一个摄像头,通常设置为ID=0 ,如果有多个摄像头,注意修改ID的值

#include
#include
#include
#include

using namespace cv;
using namespace std;
//----------------------------------------------------------------------//
//Images
int main() {
	string path = "Resources/test.jpg";
	Mat img = imread(path); //由Opencv 引入的矩阵数据类型
	imshow("Image", img);
	waitKey(0);
	return 0;
}
//----------------------------------------------------------------------//
//video
int main() {
	string path = "Resources/test_video.mp4"; //视频的位置
	//读取视频
	VideoCapture cap(path);
	Mat img;
	//显示视频
	while (true) {
		cap.read(img);
		imshow("Image", img);
		waitKey(20); //等待时间20ms
	}
	return 0;
}
//----------------------------------------------------------------------//
//摄像头
int main() {
	
	//读取视频
	VideoCapture cap(0);
	Mat img;
	//显示视频
	while (true) {
		cap.read(img);
		imshow("Image", img);
		waitKey(1); //等待时间1ms 
	}
	return 0;
}

chapter 2 基本功能
  1. 转换成灰度图 :

使用函数 cvtColor(src,dst,code_color,dstCn)

函数说明:将图片从一个色域转换成另一个色域。注意OpenCV的默认颜色格式是BGR而不是RGB。 code_color 可以从 ColorConversionCodes 中查看。dstCn:目标图片的通道数,如果为0,通道数自动从 src 和 code 派生

  1. 高斯模糊 : GaussianBlur(src,dst,Size(),x,y)

  2. 边缘检测:canny

  3. 腐蚀erode()膨胀dilate()

    c++ 中没有 numpy,因此使用getStructuringElement为erode和dilate创建kernal

#include
#include
#include
#include

using namespace cv;
using namespace std;

//Images
int main() {
	string path = "Resources/test.jpg";
	Mat img = imread(path);
	Mat dst_img, gauss_img, canny_img,dilate_img,erode_img;
	//颜色转换
	cvtColor(img, dst_img, ColorConversionCodes::COLOR_BGR2GRAY);
	
	//高斯模糊
	GaussianBlur(img, gauss_img, Size(7, 7), 3, 0);

	//边缘检测 canny
	Canny(gauss_img, canny_img, 50, 150);//threashold1,2  自己设定 ,可以使用拖拽栏来调节参数,从而设置这两个阈值,找到最佳检测
	
	//腐蚀erode()和膨胀dilate()
	//c++ 中没有 numpy,因此使用如下方式创建kernal,为dilate() 使用
	Mat kernal = getStructuringElement(MORPH_RECT, Size(3, 3));

	//膨胀
	dilate(canny_img, dilate_img, kernal);

	//腐蚀
	erode(canny_img, erode_img, kernal);
	
	imshow("Image", erode_img);
	waitKey(0);
	return 0;
}
chapter 3 调整大小和裁剪 chapter4 绘制形状和文本
转载请注明:文章转载自 www.mshxw.com
本文地址:https://www.mshxw.com/it/869058.html
我们一直用心在做
关于我们 文章归档 网站地图 联系我们

版权所有 (c)2021-2022 MSHXW.COM

ICP备案号:晋ICP备2021003244-6号