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


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

    推荐 原创

    NCUTer 2023-04-04 14:18:49

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

    一、图像读取与显示

    1. #include<opencv2/opencv.hpp>
    2. #include<iostream>
    3. using namespace cv;
    4. using namespace std;
    5. int main()
    6. {
    7. string path = "Resources/lambo.png";//图片的路径名
    8. Mat img = imread(path);//将图片加载后赋值到图像变量img中
    9. //if (path.empty()) { cout << "file not loaded" << endl; }
    10. //检查文件是否打开 没打开时执行打印语句
    11. //namedWindow("Image", WINDOW_FREERATIO);//创建一个名为Image的可调节的窗口
    12. imshow("Image", img);//创建一个窗口来显示图像img
    13. waitKey(0);//不断刷新图像
    14. return 0;
    15. }
    • 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边缘检测、膨胀腐蚀]

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

    三、图像裁剪

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

    四、绘制形状和添加文本

    1. #include <opencv2/opencv.hpp>
    2. #include <iostream>
    3. using namespace cv;
    4. using namespace std;
    5. int main()
    6. {
    7. //Blank Image
    8. Mat img(512, 512, CV_8UC3, Scalar(255, 255, 255));
    9. circle(img, Point(256, 256), 155, Scalar(0, 69, 255), FILLED);
    10. rectangle(img, Point(130, 226), Point(382, 286), Scalar(255, 255, 255), -1);
    11. line(img, Point(130, 296), Point(382, 296), Scalar(255, 255, 255), 2);
    12. putText(img, "Murtaza's Workshop", Point(137, 262), FONT_HERSHEY_DUPLEX, 0.95, Scalar(0, 69, 255), 2);
    13. imshow("Image&#
  • 相关阅读:
    【吃透MMDetction】MMDetection中的multi_apply的理解
    《操作系统-真象还原》10. 输入输出系统
    编译报错:undefined reference to `TIFFReadDirectory@LIBTIFF_4.0‘解决方法
    springboot simple (6) springboot thrift
    基本放大电路的学习
    电力安全智慧云平台:引领更安全的用电新时
    【中秋征文】“海上生明月”中秋节网页特效
    Fiddler 安装及使用教程(移动端 App 抓包)
    Android RecyclerView 之 吸顶效果
    MicroPython——有点东西,但是不多
  • 原文地址:https://blog.csdn.net/qq_20312079/article/details/134510298