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

news/2025/3/5 12:20:53/

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&#

http://www.ppmy.cn/news/1233004.html

相关文章

微服务学习|Nacos配置管理:统一配置管理、配置热更新、配置共享、搭建Nacos集群

统一配置管理 在微服务当中&#xff0c;提供一个配置中心来将一些配置提取出来&#xff0c;进行统一的使用&#xff0c;Nacos既可以充当注册中心&#xff0c;也提供配置中心的功能。 1.在Nacos中添加配置文件 在Nacos控制台&#xff0c;我们可以在配置管理中&#xff0c;添加…

记华为荣耀手机调试H5

第一步&#xff1a;检测远程调试是否支持&#xff1a;微信搜索http://debugxweb.qq.com/?inspectortrue&#xff0c;显示微信首页即可 第二步&#xff1a;USB调试&#xff1a;数据线连接电脑和手机&#xff0c;手机在设置/关于手机/连续点七下Harmony Os版本&#xff0c;打开…

C#期末速成推荐看的知识和免费视频

【拯救者】C#期末速成 (基础讲解整套题讲解文档下载) 4K ​ 这里讲的是【 &#x1f337;速成&#x1f337; 速成&#x1f337; 速成】版本&#xff0c;按课本章节来&#xff0c; 抽取重点&#xff0c;翻译为人话&#xff01;&#xff01;&#xff01;&#x1f49d; 文末附上 免…

C#获取枚举Enum的描述

简单封装个扩展方法&#xff0c;方便下次使用。 using System.ComponentModel;namespace Order.Core.API.Enums {public enum AccountStatus{[Description("账号不存在&#xff01;")]AccountNotExist 1,[Description("密码错误&#xff01;")]PasswordE…

cc linux用root用户执行chmod 777 -R ./提示 Operation not permitted怎么办?

如果你作为 root 用户执行 chmod 777 -R ./ 命令时收到 “Operation not permitted” 错误&#xff0c;可能有几个原因&#xff1a; 不可更改 (Immutable) 文件属性&#xff1a; 文件可能被设置为不可更改。即使是 root 用户也不能修改这些文件的权限。使用 lsattr 命令查看文件…

【代码随想录】刷题笔记Day33

前言 Day33虽说是一个月&#xff0c;但是从第一篇开始实际上已经过了8个月了&#xff0c;得抓紧啊 46. 全排列 - 力扣&#xff08;LeetCode&#xff09; 前面组合就强调过差别了&#xff0c;这道题是排序&#xff0c;因此每次要从头到尾扫&#xff0c;结合used数组 class So…

【Java】面向对象程序设计 错题本

单选题 期中小测错题 1. Which specifier essentially declares a variable a global variable? A. protected B. static C. final D. default B global variable 是全局变量&#xff0c;也就是用 static 修饰的静态变量&#xff0c;因为它被所有实例所共享&#xff1b;…

Sentinel 监控数据持久化(mysql)

Sentinel 实时监控仅存储 5 分钟以内的数据&#xff0c;如果需要持久化&#xff0c;需要通过调用实时监控接口来定制&#xff0c;即自行扩展实现 MetricsRepository 接口&#xff08;修改 控制台源码&#xff09;。 本文通过使用Mysql持久化监控数据。 1.构建存储表&#xff08…