当前位置: 首页 > news >正文

利用C++编写操作OpenCV常用操作

C++编写操作OpenCV常用操作

  • 环境配置
  • 读取图像
  • 读取视频
  • 调用摄像头
  • 调整图像尺寸与裁剪
  • 灰度、高斯滤波、边缘检测与膨胀腐蚀
  • 绘制形状和文本
  • 翘曲景观(鸟俯图)
  • 颜色检测

环境配置

首先下载:Visual Studio与功能包OpenCV
其次进行配置

  1. 环境配置
    在这里插入图片描述
    在这里插入图片描述
  2. 路径配置
    找到:项目——属性
    在这里插入图片描述
    在这里插入图片描述
    在这里插入图片描述
    注意:链接器的附加依赖项根据opencv版本的不同而不同,我的手opencv4.6.0

读取图像

// 功能:调用路径图片
// 头文件
#include <opencv2/imgcodecs.hpp>	// 映像
#include <opencv2/highgui.hpp>	// gui
#include <opencv2/imgproc.hpp>	// 图像处理
#include <iostream>		// 输入输出
// 预编译
using namespace cv;
using namespace std;

 读取图像 
void main()
{
	string path = "E:/ProjectOpencv/Project1/test.png";  // 设置路径
	Mat img = imread(path);  // 读取图片
	imshow("Image", img);	// 展示窗口
	waitKey(0);	// 延迟

}

读取视频

// 功能:调用路径图片
// 头文件
#include <opencv2/imgcodecs.hpp>	// 映像
#include <opencv2/highgui.hpp>	// gui
#include <opencv2/imgproc.hpp>	// 图像处理
#include <iostream>		// 输入输出
// 预编译
using namespace cv;
using namespace std;

 读取视频 
void main()
{
	string path = "E:/ProjectOpencv/Project1/test_video.mp4";	// 设置路径
	VideoCapture cap(path);		// 视频流
	Mat img;	// 数学图像

	while (true) {

		cap.read(img);	// 读取对应数学图像
		imshow("Image", img);  // 展示窗口
		waitKey(10);	// 延迟
	}
}

调用摄像头

// 功能:调用路径图片
// 头文件
#include <opencv2/imgcodecs.hpp>	// 映像
#include <opencv2/highgui.hpp>	// gui
#include <opencv2/imgproc.hpp>	// 图像处理
#include <iostream>		// 输入输出
// 预编译
using namespace cv;
using namespace std;
 调用摄像头 
void main()
{
	VideoCapture cap(0);		// 视频流
	Mat img;	// 数学图像

	while (true) {

		cap.read(img);	// 读取对应数学图像
		imshow("Image", img);  // 展示窗口
		waitKey(1);	// 延迟
	}
}

调整图像尺寸与裁剪

// 头文件
#include <opencv2/imgcodecs.hpp>        // 映像
#include <opencv2/highgui.hpp>        // gui
#include <opencv2/imgproc.hpp>        // 图像处理
#include <iostream>                // 输入输出
// 预编译
using namespace cv;
using namespace std;

 读取图像 
void main()
{
    string path = "E:/ProjectOpencv/Project1/test.png";  // 设置路径
    Mat img = imread(path);  // 读取图片   
	Mat imgResize, imgCrop;		// 声明变量

	//cout << img.size() << endl; // 打印图像大小
	resize(img, imgResize, Size(), 0.5, 0.5);	// 调整图像尺寸(此为等比调整,若想自己调整只需要再Size里输入尺寸即可)

	Rect roi(200, 100, 300, 300);	// 裁剪标准(作标x和y,裁剪的宽度和高度)
	imgCrop = img(roi);  // 裁剪图片

	imshow("Image", img);
	imshow("Image Resize", imgResize);
	imshow("Image Crop", imgCrop);
	waitKey(0);
}

在这里插入图片描述

灰度、高斯滤波、边缘检测与膨胀腐蚀

// 头文件
#include <opencv2/imgcodecs.hpp>        // 映像
#include <opencv2/highgui.hpp>        // gui
#include <opencv2/imgproc.hpp>        // 图像处理
#include <iostream>                // 输入输出
// 预编译
using namespace cv;
using namespace std;

 读取图像 
void main()
{
    string path = "E:/ProjectOpencv/Project1/test.png";  // 设置路径
    Mat img = imread(path);  // 读取图片   
	Mat imgGray, imgBlur, imgCanny, imgDil, imgErode;	// 声明变量

	cvtColor(img, imgGray, COLOR_BGR2GRAY);		// 转化图像(输入对象,输出对象,颜色操作)
	GaussianBlur(imgGray, imgBlur, Size(7, 7), 5, 0);	// 高斯滤波(输入对象,输出对象,内核大小,sigma x,sigma y)
	Canny(imgBlur, imgCanny, 25, 75);	// Canny边缘检测器(输入对象,输出对象,两个阈值)

	Mat kernel = getStructuringElement(MORPH_RECT, Size(3, 3));		// 编写内核(3x3的矩阵)
	dilate(imgCanny, imgDil, kernel);	// 图像膨胀
	erode(imgDil, imgErode, kernel);	// 图像侵蚀

	// 展示图片
	imshow("Image", img);
	imshow("Image Gray", imgGray);
	imshow("Image Blur", imgBlur);
	imshow("Image Canny", imgCanny);
	imshow("Image Dilation", imgDil);
	imshow("Image Erode", imgErode);
	waitKey(0);
}

在这里插入图片描述

绘制形状和文本

// 头文件
#include <opencv2/imgcodecs.hpp>        // 映像
#include <opencv2/highgui.hpp>        // gui
#include <opencv2/imgproc.hpp>        // 图像处理
#include <iostream>                // 输入输出
// 预编译
using namespace cv;
using namespace std;

 绘制形状和文字 
void main() {

	// 黑色图像
	Mat img(512, 512, CV_8UC3, Scalar(255, 255, 255));	// 绘制画布

	circle(img, Point(256, 256), 155, Scalar(0, 69, 255), FILLED);  // 绘制圆(参数:画布对象,圆心位置,半径,颜色,线条粗细)
	rectangle(img, Point(130, 226), Point(382, 286), Scalar(255, 255, 255), FILLED);	// 绘制矩形(参数:画布对象,左上角位置,右下角位置,颜色,线条粗细)
	line(img, Point(130, 296), Point(382, 296), Scalar(255, 255, 255), 2);	// 绘制线(参数:画布对象,起始点,终点,颜色,线条粗细)

	putText(img, "Wo bleibt Mozart", Point(137, 262), FONT_HERSHEY_DUPLEX, 0.75, Scalar(0, 69, 255), 2);  // 绘制文字(参数:画布对象,文字内容,起始位置,字体类型,字体大小,颜色,线条粗细)

	imshow("Image", img);
	waitKey(0);
}

在这里插入图片描述

翘曲景观(鸟俯图)

// 头文件
#include <opencv2/imgcodecs.hpp>        // 映像
#include <opencv2/highgui.hpp>        // gui
#include <opencv2/imgproc.hpp>        // 图像处理
#include <iostream>                // 输入输出
// 预编译
using namespace cv;
using namespace std;

/// 翘曲景观(鸟俯图) //

void main() {

	string path = "E:/ProjectOpencv/Project1/cards.jpg";  // 文件路径
	Mat img = imread(path);	//读取文件
	Mat matrix, imgWarp;	// 预定义
	float w = 250, h = 350;	// 定义使用高宽

	Point2f src[4] = { {529,142},{771,190},{405,395},{674,457} }; // 图片的四个坐标称为矩阵要点(我们可以通过图片编辑软件获得)(数组)
	Point2f dst[4] = { {0.0f,0.0f},{w,0.0f},{0.0f,h},{w,h} };	// 定义新的显示图像大小(数组)
	// 使用转换矩阵进行处理(线性变换矩阵)
	matrix = getPerspectiveTransform(src, dst); // 仿射变换(matrix是变换关系矩阵)
	warpPerspective(img, imgWarp, matrix, Point(w, h)); // 

	// 显示四个点
	for (int i = 0; i < 4; i++)
	{
		circle(img, src[i], 10, Scalar(0, 0, 255), FILLED);
	}
	// 显示图片
	imshow("Image", img);
	imshow("Image Warp", imgWarp);
	waitKey(0);

}

在这里插入图片描述

颜色检测

// 头文件
#include <opencv2/imgcodecs.hpp>        // 映像
#include <opencv2/highgui.hpp>        // gui
#include <opencv2/imgproc.hpp>        // 图像处理
#include <iostream>                // 输入输出
// 预编译
using namespace cv;
using namespace std;

/// 颜色检测 //

void main() {
	string path = "E:/ProjectOpencv/Project1/lambo.png";  // 文件路径
	Mat img = imread(path);	//读取文件
	Mat imgHSV, mask;	// 预定义
	// 设置我们所要选的颜色界限
	int hmin = 0, smin = 110, vmin = 153;
	int hmax = 19, smax = 240, vmax = 255;

	cvtColor(img, imgHSV, COLOR_BGR2HSV);	// BGR颜色空间转化为HSV(输入对象,输出对象,颜色操作)

	// 创建一个窗口做参数调整
	namedWindow("Trackbars", (640, 200));
	createTrackbar("Hue Min", "Trackbars", &hmin, 179);	// H通道色调(进度条名,显示窗口,值地址,最大值)
	createTrackbar("Hue Max", "Trackbars", &hmax, 179);	
	createTrackbar("Sat Min", "Trackbars", &smin, 255);	// S通道饱和度(进度条名,显示窗口,值地址,最大值)
	createTrackbar("Sat Max", "Trackbars", &smax, 255);
	createTrackbar("Val Min", "Trackbars", &vmin, 255);	// V通道明度(进度条名,显示窗口,值地址,最大值)
	createTrackbar("Val Max", "Trackbars", &vmax, 255);

	while (true) {
		// 设置hsv的界限
		Scalar lower(hmin, smin, vmin);
		Scalar upper(hmax, smax, vmax);
		inRange(imgHSV, lower, upper, mask);  // 设置上下限值,mask为输出图像

		// 显示图片
		imshow("Image", img);
		imshow("Image HSV", imgHSV);
		imshow("Image Mask", mask);
		waitKey(1);
	}
}

在这里插入图片描述

相关文章:

  • 编程速递-Delphi is 30 Delphi诞生30周年!
  • MySQL-SQL-DQL语句、DQL基本查询、DQL条件查询、DQL分组查询、聚合函数、DQL排序查询、DQL分页查询
  • 【勒让德公式】欧拉筛-阶乘分解
  • 【硬件开发技巧】如何通过元器件丝印反查型号
  • vector模拟实现(2)
  • 蓝桥杯2024年第十五届省赛真题-拔河
  • 专栏:区块链入门到放弃查看目录
  • el-tabs添加按钮增加点击禁止样式
  • ubuntu 配置固定ip
  • getline(cin, )
  • Qt音频输出:QAudioOutput详解与示例
  • 玄机-apache日志分析
  • PDF预览-搜索并高亮文本
  • 基于OpenXLSX库创建的CAPL中可用的解析xlsx文件的DLL
  • traefik k3s配置
  • MongoDB基础知识
  • 页游(弹弹堂)刷怪脚本教程(一)---大漠插件制作颜色变化的字体字库(按键精灵)
  • Java项目之基于ssm的个性化旅游攻略定制系统(源码+文档)
  • http://noi.openjudge.cn/_2.5基本算法之搜索_1804:小游戏
  • 实验室预约|实验室预约小程序|基于Java+vue微信小程序的实验室预约管理系统设计与实现(源码+数据库+文档)
  • asp 公司网站/友情链接样式
  • 网站开发要学什么语言/百度的网址
  • 巴彦淖尔网站网站建设/扬州网络优化推广
  • behance设计网站推荐/谷歌下载
  • javaweb和javaee/郑州seo优化公司
  • 做品牌网站怎么样/湖南企业seo优化推荐