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

OpenCV [c++](图像处理基础示例小程序汇总)

OpenCV [c++](图像处理基础示例小程序汇总)

推荐 原创

NCUTer 2023-04-04 14:18:49

文章标签 Image 图像处理 文章分类 计算机视觉 人工智能 在51CTO的第一篇博文 阅读数1467

一、图像读取与显示

#include<opencv2/opencv.hpp>
#include<iostream>using namespace cv;
using namespace std;int main()
{string path = "Resources/lambo.png";//图片的路径名Mat img = imread(path);//将图片加载后赋值到图像变量img中//if (path.empty()) { cout << "file not loaded" << endl; }//检查文件是否打开 没打开时执行打印语句//namedWindow("Image", WINDOW_FREERATIO);//创建一个名为Image的可调节的窗口imshow("Image", img);//创建一个窗口来显示图像imgwaitKey(0);//不断刷新图像return 0;
}
  • 1.
  • 2.
  • 3.
  • 4.
  • 5.
  • 6.
  • 7.
  • 8.
  • 9.
  • 10.
  • 11.
  • 12.
  • 13.
  • 14.
  • 15.
  • 16.
  • 17.
  • waitKey()函数的功能是不断刷新图像,频率为delay,单位是ms。
  • delay为0时,则会一直显示这一帧。
  • delay不为0时,则在显示完一帧图像后程序等待“delay"ms再显示下一帧图像。

二、图像预处理[高斯滤波、canny边缘检测、膨胀腐蚀]

#include <opencv2/opencv.hpp>
#include <iostream>using namespace cv;
using namespace std;void main() {string path = "Resources/test.png";Mat img = imread(path);Mat imgGray,imgBlur,imgCanny,imgDil,imgErode;//将照片转换为灰度cvtColor(img, imgGray, COLOR_BGR2GRAY);//高斯模糊GaussianBlur(imgGray, imgBlur, Size(3, 3), 3, 0);//Canny边缘检测器  一般在使用Canny边缘检测器之前会做一些模糊处理Canny(imgBlur, imgCanny, 25, 75);//创建一个可以使用膨胀的内核Mat kernel = getStructuringElement(MORPH_RECT, Size(3, 3));//图像膨胀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);
}
  • 1.
  • 2.
  • 3.
  • 4.
  • 5.
  • 6.
  • 7.
  • 8.
  • 9.
  • 10.
  • 11.
  • 12.
  • 13.
  • 14.
  • 15.
  • 16.
  • 17.
  • 18.
  • 19.
  • 20.
  • 21.
  • 22.
  • 23.
  • 24.
  • 25.
  • 26.
  • 27.
  • 28.
  • 29.
  • 30.
  • 31.
  • 32.
  • 33.

OpenCV [c++](图像处理基础示例小程序汇总)_图像处理

Canny 边缘检测

Canny(imgBlur, imgCanny, 25, 75);
  • 1.

第3和第4个参数分别代表底阈值和高阈值,其中底阈值常取高阈值的1/2或1/3

OpenCV [c++](图像处理基础示例小程序汇总)_Image_02

三、图像裁剪

#include <opencv2/opencv.hpp>
#include <iostream>using namespace cv;
using namespace std;void main() {string path = "Resources/test.png";Mat img = imread(path);Mat imgResize,imgCrop;//调整图像大小//cout << img.size() << endl;//查看原图像的大小//resize(img, imgResize, Size(640, 480));//按自定义的宽度与高度缩放resize(img, imgResize, Size(),0.5,0.5);//按比例缩放//图像裁剪Rect roi(200, 100, 300, 300);//前面两个参数为距左上原点的x方向与y方向的距离,后两个参数为延伸的x,y长度imgCrop = img(roi);imshow("Image", img);imshow("Image Resize", imgResize);imshow("Image Crop", imgCrop);waitKey(0);}
  • 1.
  • 2.
  • 3.
  • 4.
  • 5.
  • 6.
  • 7.
  • 8.
  • 9.
  • 10.
  • 11.
  • 12.
  • 13.
  • 14.
  • 15.
  • 16.
  • 17.
  • 18.
  • 19.
  • 20.
  • 21.
  • 22.
  • 23.
  • 24.
  • 25.
  • 26.

void cv::resize(InputArray src, OutputArray dst, Size dsize, double fx=0, double fy=0, int interpolation = INTER_LINEAR)

调整图像的大小。函数 resize 将图像 src 的大小缩小到或最大到指定的大小。请注意,不考虑初始 dst 类型或大小。相反,大小和类型是从 src、dsize、fx 和 fy 派生的。

OpenCV [c++](图像处理基础示例小程序汇总)_Image_03

四、绘制形状和添加文本

#include <opencv2/opencv.hpp>
#include <iostream>using namespace cv;
using namespace std;int main()
{//Blank ImageMat 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), -1);line(img, Point(130, 296), Point(382, 296), Scalar(255, 255, 255), 2);putText(img, "Murtaza's Workshop", Point(137, 262), FONT_HERSHEY_DUPLEX, 0.95, Scalar(0, 69, 255), 2);imshow("Image&#

相关文章:

  • 使用new Vue()的时候发生了什么?
  • 案例015:Java+SSM+uniapp基于微信小程序的校园防疫系统
  • Hadoop学习笔记:运行wordcount对文件字符串进行统计案例
  • mac电脑系统活动监控:iStat Menus 中文 for Mac
  • 数据结构:顺序表
  • Java对象逃逸
  • 【学生成绩管理】数据库示例数据(MySQL代码)
  • 第十三章 : Spring Boot 日志记录脱敏
  • 【Python 训练营】N_3 生成互不相同且不重复的数字
  • 核药供应链创新:远大医药策略与明道云实践
  • 认识前端包常用包管理工具(npm、cnpm、pnpm、nvm、yarn)
  • 家用小型洗衣机哪款性价比高?口碑最好迷你洗衣机排行榜
  • 最新AIGC创作系统ChatGPT网站源码,Midjourney绘画系统,支持GPT-4图片对话能力(上传图片并识图理解对话),支持DALL-E3文生图
  • gitlab 12升级14(解决各种报错问题)
  • 数字图像处理(实践篇)一 将图像中的指定目标用bBox框起来吧!
  • 【EOS】Cleos基础
  • 【翻译】babel对TC39装饰器草案的实现
  • Bootstrap JS插件Alert源码分析
  • C++类的相互关联
  • C++类中的特殊成员函数
  • GitUp, 你不可错过的秀外慧中的git工具
  • NSTimer学习笔记
  • python大佬养成计划----difflib模块
  • seaborn 安装成功 + ImportError: DLL load failed: 找不到指定的模块 问题解决
  • supervisor 永不挂掉的进程 安装以及使用
  • vue总结
  • 对象管理器(defineProperty)学习笔记
  • 分享自己折腾多时的一套 vue 组件 --we-vue
  • 技术攻略】php设计模式(一):简介及创建型模式
  • 前端每日实战 2018 年 7 月份项目汇总(共 29 个项目)
  • 浅谈Kotlin实战篇之自定义View图片圆角简单应用(一)
  • 我这样减少了26.5M Java内存!
  • 深度学习之轻量级神经网络在TWS蓝牙音频处理器上的部署
  • MPAndroidChart 教程:Y轴 YAxis
  • 摩拜创始人胡玮炜也彻底离开了,共享单车行业还有未来吗? ...
  • (12)Linux 常见的三种进程状态
  • (顶刊)一个基于分类代理模型的超多目标优化算法
  • (附源码)ssm高校升本考试管理系统 毕业设计 201631
  • (附源码)ssm基于jsp高校选课系统 毕业设计 291627
  • (附源码)计算机毕业设计ssm基于B_S的汽车售后服务管理系统
  • (黑马出品_高级篇_01)SpringCloud+RabbitMQ+Docker+Redis+搜索+分布式
  • (算法)N皇后问题
  • (转) Face-Resources
  • .Net core 6.0 升8.0
  • .NET Core跨平台微服务学习资源
  • .NET MVC 验证码
  • .net web项目 调用webService
  • .NET 发展历程
  • .NET牛人应该知道些什么(2):中级.NET开发人员
  • .NET企业级应用架构设计系列之开场白
  • @configuration注解_2w字长文给你讲透了配置类为什么要添加 @Configuration注解
  • @WebService和@WebMethod注解的用法
  • [ IOS ] iOS-控制器View的创建和生命周期
  • [ 代码审计篇 ] 代码审计案例详解(一) SQL注入代码审计案例
  • [\u4e00-\u9fa5] //匹配中文字符