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);//创建一个窗口来显示图像img
	waitKey(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 Image
	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), -1);
	line(img, Point(130, 296), Point(382, 296), Scalar(255, 255, 255), 2);
 
	putText(img, "Murtaza's Workshop", Point(137, 262), F
  • 0
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
OpenCV是一个开源计算机视觉库,提供了许多用于图像处理的函数和工具。下面是使用OpenCV C++实现图像处理基本操作的步骤: 1. 首先,需要在C++程序中包含OpenCV的头文件: ```c++ #include <opencv2/core/core.hpp> #include <opencv2/imgcodecs.hpp> #include <opencv2/highgui.hpp> #include <opencv2/imgproc.hpp> #include <iostream> ``` 2. 读取图像文件并显示图像: ```c++ cv::Mat image = cv::imread("example.jpg"); // 读取图像文件 cv::imshow("Image", image); // 显示图像 cv::waitKey(0); // 等待用户输入任意键继续 ``` 3. 转换图像的颜色空间: ```c++ cv::Mat gray_image; cv::cvtColor(image, gray_image, cv::COLOR_BGR2GRAY); // 将图像从BGR色彩空间转换为灰度色彩空间 cv::imshow("Gray Image", gray_image); cv::waitKey(0); ``` 4. 图像的平滑滤波: ```c++ cv::Mat blur_image; cv::GaussianBlur(image, blur_image, cv::Size(5, 5), 0); // 高斯滤波 cv::imshow("Blur Image", blur_image); cv::waitKey(0); ``` 5. 图像的边缘检测: ```c++ cv::Mat canny_image; cv::Canny(image, canny_image, 100, 200, 3); // Canny边缘检测 cv::imshow("Canny Image", canny_image); cv::waitKey(0); ``` 6. 识别图像中的轮廓: ```c++ cv::Mat contour_image = image.clone(); // 克隆原始图像,以便在上面绘制轮廓 cv::cvtColor(image, gray_image, cv::COLOR_BGR2GRAY); // 首先将图像从BGR色彩空间转换为灰度色彩空间 cv::threshold(gray_image, gray_image, 100, 255, cv::THRESH_BINARY); // 二值化图像 std::vector<std::vector<cv::Point>> contours; // 存储轮廓点的向量 std::vector<cv::Vec4i> hierarchy; // 存储轮廓层次结构的向量 cv::findContours(gray_image, contours, hierarchy, cv::RETR_TREE, cv::CHAIN_APPROX_SIMPLE); // 查找轮廓 for (int i = 0; i < contours.size(); i++) // 遍历所有轮廓并绘制 { cv::Scalar color = cv::Scalar(0, 0, 255); // 定义轮廓颜色(红色) cv::drawContours(contour_image, contours, i, color, 2, cv::LINE_8, hierarchy, 0); // 在图像上绘制每个轮廓 } cv::imshow("Contour Image", contour_image); cv::waitKey(0); ``` 引用: opencv(c++)实现图像处理基本操作。常见头文件 #include<opencv2/core/core.hpp> #include<opencv2/imgcodecs.hpp> #include<opencv2/highgui.hpp> #include<opencv2/imgproc.hpp> #include<iostream> [^1]。引用:Opencv c++(图像处理)。openCV 中 cv::Rect 矩形类用法_sinat_38102206的博客-CSDN博客_cv rect [^2]。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

qq_20312079

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值