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

vscode + cmake + opencv example

nice try on macos

CMakeLists.txt

cmake_minimum_required(VERSION 3.20)
#添加OPENCV库
#指定OpenCV版本,代码如下
#find_package(OpenCV 3.3 REQUIRED)
#如果不需要指定OpenCV版本,代码如下
find_package(OpenCV REQUIRED)#添加OpenCV头文件
include_directories(${OpenCV_INCLUDE_DIRS})#显示OpenCV_INCLUDE_DIRS的值
message(${OpenCV_INCLUDE_DIRS})# 添加一个可执行程序
# 语法:add_executable( 程序名 源代码文件 )
add_executable( main main.cpp )# 将库文件链接到可执行程序上
target_link_libraries( main  ${OpenCV_LIBS})
file(GLOB allCopyFiles  "./*.jpg")
file(COPY ${allCopyFiles} DESTINATION .) #copy any .jpg file to <build> dir# 或者
# file(GLOB allCopyFiles "${NSF_HOME}/lib/*")
# execute_process(COMMAND cp ${allCopyFiles} ${LIB})

main.cpp

    #include <iostream>#include "opencv2/imgproc.hpp"#include "opencv2/ximgproc.hpp"#include "opencv2/imgcodecs.hpp"#include "opencv2/highgui.hpp"using namespace std;using namespace cv;using namespace cv::ximgproc;int main(int argc, char **argv){string in;// 修改图片CommandLineParser parser(argc, argv, "{@input|me.jpg|input image}{help h||show help message}");if (parser.has("help")){parser.printMessage();return 0;}in = samples::findFile(parser.get<string>("@input"));Mat image = imread(in, IMREAD_GRAYSCALE);if (image.empty()){return -1;}// Create FLD detector// Param               Default value   Description// length_threshold    10            - Segments shorter than this will be discarded// distance_threshold  1.41421356    - A point placed from a hypothesis line//                                     segment farther than this will be//                                     regarded as an outlier// canny_th1           50            - First threshold for//                                     hysteresis procedure in Canny()// canny_th2           50            - Second threshold for//                                     hysteresis procedure in Canny()// canny_aperture_size 3            - Aperturesize for the sobel operator in Canny().//                                     If zero, Canny() is not applied and the input//                                     image is taken as an edge image.// do_merge            false         - If true, incremental merging of segments//                                     will be performedint length_threshold = 10;float distance_threshold = 1.41421356f;double canny_th1 = 50.0;double canny_th2 = 50.0;int canny_aperture_size = 3;bool do_merge = false;Ptr<FastLineDetector> fld = createFastLineDetector(length_threshold,distance_threshold, canny_th1, canny_th2, canny_aperture_size,do_merge);vector<Vec4f> lines;// Because of some CPU's power strategy, it seems that the first running of// an algorithm takes much longer. So here we run the algorithm 10 times// to see the algorithm's processing time with sufficiently warmed-up// CPU performance.for (int run_count = 0; run_count < 5; run_count++){double freq = getTickFrequency();lines.clear();int64 start = getTickCount();// Detect the lines with FLDfld->detect(image, lines);double duration_ms = double(getTickCount() - start) * 1000 / freq;cout << "Elapsed time for FLD " << duration_ms << " ms." << endl;}// Show found lines with FLDMat line_image_fld(image);fld->drawSegments(line_image_fld, lines);imshow("FLD result", line_image_fld);waitKey(1);Ptr<EdgeDrawing> ed = createEdgeDrawing();ed->params.EdgeDetectionOperator = EdgeDrawing::SOBEL;ed->params.GradientThresholdValue = 38;ed->params.AnchorThresholdValue = 8;vector<Vec6d> ellipses;for (int run_count = 0; run_count < 5; run_count++){double freq = getTickFrequency();lines.clear();int64 start = getTickCount();// Detect edges// you should call this before detectLines() and detectEllipses()ed->detectEdges(image);// Detect linesed->detectLines(lines);double duration_ms = double(getTickCount() - start) * 1000 / freq;cout << "Elapsed time for EdgeDrawing detectLines " << duration_ms << " ms." << endl;start = getTickCount();// Detect circles and ellipsesed->detectEllipses(ellipses);duration_ms = double(getTickCount() - start) * 1000 / freq;cout << "Elapsed time for EdgeDrawing detectEllipses " << duration_ms << " ms." << endl;}Mat edge_image_ed = Mat::zeros(image.size(), CV_8UC3);vector<vector<Point>> segments = ed->getSegments();for (size_t i = 0; i < segments.size(); i++){const Point *pts = &segments[i][0];int n = (int)segments[i].size();polylines(edge_image_ed, &pts, &n, 1, false, Scalar((rand() & 255), (rand() & 255), (rand() & 255)), 1);}imshow("EdgeDrawing detected edges", edge_image_ed);Mat line_image_ed(image);fld->drawSegments(line_image_ed, lines);// Draw circles and ellipsesfor (size_t i = 0; i < ellipses.size(); i++){Point center((int)ellipses[i][0], (int)ellipses[i][1]);Size axes((int)ellipses[i][2] + (int)ellipses[i][3], (int)ellipses[i][2] + (int)ellipses[i][4]);double angle(ellipses[i][5]);Scalar color = ellipses[i][2] == 0 ? Scalar(255, 255, 0) : Scalar(0, 255, 0);ellipse(line_image_ed, center, axes, angle, 0, 360, color, 2, LINE_AA);}imshow("EdgeDrawing result", line_image_ed);waitKey();return 0;}

提供一张名叫me.jpg的文件到build文件夹下

REF LINKS:

  • https://docs.opencv.org/3.4/d1/d9e/fld_lines_8cpp-example.html
  • https://www.cnblogs.com/JoyPoint/p/11629521.html
http://www.lryc.cn/news/223198.html

相关文章:

  • day57【动态规划】647.回文子串 516.最长回文子序列
  • 分享vmware和Oracle VM VirtualBox虚拟机的区别,简述哪一个更适合我?
  • YOLOV5模型运行
  • @Autowired和@Resource注解的区别和联系
  • 设计模式类型
  • Android修行手册-实现利用POI将图片插入到Excel中(文末送书)
  • 低功耗工业RFID设备应用
  • # Oracle 库常见问题排查
  • 矩阵乘积的迹对矩阵求导
  • IP 地址冲突检测工具
  • js树形数组遍历练习,扁平化、格式化、获取节点父级
  • c语言贪吃蛇项目的实现
  • IDEA运行前端vue项目,安装nodejs,以及配置
  • SAP S4后的一些注意点(一)(更新中)
  • Python高级语法----深入asyncio:构建异步应用
  • 5-爬虫-打码平台、打码平台自动登录打码平台、selenium爬取京东商品信息、scrapy介绍安装、scrapy目录结构
  • HTTPS 的工作原理是什么?
  • 【STM32】TIM2的PWM:脉冲宽度调制
  • DRF 学习
  • 2023年双11有哪些便宜的云服务器值得推荐?
  • [Java/力扣160]相交链表
  • LLVM学习笔记(60)
  • Linux命令查看pcap包报文数量、包体包含内容、包长
  • C++二分算法: 找出第 K 小的数对距离
  • 【计算机网络笔记】网络层服务模型——虚电路网络
  • 软文推广过程中,如何精准定位受众
  • 说说对React中类组件和函数组件的理解?有什么区别?
  • Unity 实例化物体以及赋予到父物体之下
  • Docker 介绍
  • VScode连接Xshell 并解决【过程试图写入的管道不存在】报错