Canny edge detector

效率高,效果可控。

  • TrackBar的使用。
  • 技巧:gray找边缘后作为mask去CopyTo()。

  1. #include "opencv2/core/utility.hpp"
  2. #include "opencv2/imgproc.hpp"
  3. #include "opencv2/imgcodecs.hpp"
  4. #include "opencv2/highgui.hpp"
  5.  
  6. #include <stdio.h>
  7.  
  8. using namespace cv;
  9. using namespace std;
  10.  
  11. int edgeThresh = 1;
  12. Mat image, gray, edge, cedge;
  13.  
  14. // define a trackbar callback
  15. static void onTrackbar(int, void*)
  16. {
  17. /* Step one */
  18. blur(gray, edge, Size(3,3));
  19.  
  20. // Run the edge detector on grayscale
  21. Canny(edge, edge, edgeThresh, edgeThresh*3, 3);
  22. cedge = Scalar::all(0);
  23.  
  24. /*
  25. * Jeff --> the second parameter is mask.
  26. */
  27. image.copyTo(cedge, edge);
  28. imshow("Edge map", cedge);
  29. }
  30.  
  31. static void help()
  32. {
  33. printf("\nThis sample demonstrates Canny edge detection\n"
  34. "Call:\n"
  35. " /.edge [image_name -- Default is ../data/fruits.jpg]\n\n");
  36. }
  37.  
  38. const char* keys =
  39. {
  40. "{help h||}{@image |../data/fruits.jpg|input image name}"
  41. };
  42.  
  43. int main( int argc, const char** argv )
  44. {
  45. CommandLineParser parser(argc, argv, keys);
  46. if (parser.has("help"))
  47. {
  48. help();
  49. return 0;
  50. }
  51. string filename = parser.get<string>(0);
  52.  
  53. image = imread(filename, 1);
  54. if(image.empty())
  55. {
  56. printf("Cannot read image file: %s\n", filename.c_str());
  57. help();
  58. return -1;
  59. }
  60. cedge.create(image.size(), image.type());
  61. cvtColor(image, gray, COLOR_BGR2GRAY);
  62.  
  63. // Create a window
  64. namedWindow("Edge map", 1);
  65.  
  66. // create a toolbar
  67. createTrackbar("Canny threshold", "Edge map", &edgeThresh, 100, onTrackbar);
  68.  
  69. // Show the image
  70. onTrackbar(0, 0);
  71.  
  72. // Wait for a key stroke; the same function arranges events processing
  73. waitKey(0);
  74.  
  75. return 0;
  76. }

  

[OpenCV] Samples 08: edge的更多相关文章

  1. [OpenCV] Samples 10: imagelist_creator

    yaml写法的简单例子.将 $ ./ 1 2 3 4 5 命令的参数(代表图片地址)写入yaml中. 写yaml文件. 参考:[OpenCV] Samples 06: [ML] logistic re ...

  2. [OpenCV] Samples 16: Decompose and Analyse RGB channels

    物体的颜色特征决定了灰度处理不是万能,对RGB分别处理具有相当的意义. #include <iostream> #include <stdio.h> #include &quo ...

  3. [OpenCV] Samples 12: laplace

    先模糊再laplace,也可以替换为sobel等. 变换效果后录成视频,挺好玩. #include "opencv2/videoio/videoio.hpp" #include & ...

  4. [OpenCV] Samples 06: [ML] logistic regression

    logistic regression,这个算法只能解决简单的线性二分类,在众多的机器学习分类算法中并不出众,但它能被改进为多分类,并换了另外一个名字softmax, 这可是深度学习中响当当的分类算法 ...

  5. [OpenCV] Samples 06: logistic regression

    logistic regression,这个算法只能解决简单的线性二分类,在众多的机器学习分类算法中并不出众,但它能被改进为多分类,并换了另外一个名字softmax, 这可是深度学习中响当当的分类算法 ...

  6. [OpenCV] Samples 13: opencv_version

    cv::CommandLineParser的使用. I suppose CommandLineParser::has("something") should be true whe ...

  7. [OpenCV] Samples 05: convexhull

    得到了复杂轮廓往往不适合特征的检测,这里再介绍一个点集凸包络的提取函数convexHull,输入参数就可以是contours组中的一个轮廓,返回外凸包络的点集 ---- 如此就能去掉凹进去的边. 对于 ...

  8. [OpenCV] Samples 03: cout_mat

    操作Mat元素时:I.at<double>(1,1) = CV_PI; /* * * cvout_sample just demonstrates the serial out capab ...

  9. [OpenCV] Samples 02: [ML] kmeans

    注意Mat作为kmeans的参数的含义. 扩展:高维向量的聚类. #include "opencv2/highgui.hpp" #include "opencv2/cor ...

随机推荐

  1. 使用Excel对象模型在Excel单元格中设置不同的字体

    效果是这样的: 首先找到这个单元格或区域Range cell,然后代码: ((Range)cell). Characters[, ].Font.Color = Color.Blue; ((Range) ...

  2. Drupal资源

    以下是一些Drupal的常用资源. www.drupal.org:Drupal官网,拥有最全 www.acquia.com:Drupal奠基人Dries主导的专业网站,有著名的Aquia平台,功能类似 ...

  3. 【图像处理】第三次实验:JPEG图像压缩

    1.任务说明 将LENA图像用JPEG方式压缩. 2.算法原理 JPEG(Joint Photographic Experts Group)是一个由ISO和IEC两个组织机构联合组成的一个专家组,负责 ...

  4. 错误 "sgen.exe" exited with code 1.解决方法(转)

    原文出自 http://blog.sina.com.cn/s/blog_8411d3f401015u1w.html VS中有时候编译项目会出现这样的错误: 错误   "sgen.exe&qu ...

  5. React Native也正式发布了

    var React = require('react-native'); var { TabBarIOS, NavigatorIOS } = React; var App = React.create ...

  6. Microsoft 参考源代码系统更新,有惊喜哦。

    在以前,MS的参考源代码在单步调试时时好用时不好用,最后我找到了原因,那就是如果想用MS的参考源代码进行单步调试,那么你就得想尽办法把系统上的.NET FX降级到RTM版本(卸载各种相关补丁),今天我 ...

  7. WebRTC实现网页版多人视频聊天室

    因为产品中要加入网页中网络会议的功能,这几天都在倒腾 WebRTC,现在分享下工作成果. 话说 WebRTC Real Time Communication 简称 RTC,是谷歌若干年前收购的一项技术 ...

  8. 依赖倒置原则(Dependency Inversion Principle)

    很多软件工程师都多少在处理 "Bad Design"时有一些痛苦的经历.如果发现这些 "Bad Design" 的始作俑者就是我们自己时,那感觉就更糟糕了.那么 ...

  9. 《C#图解教程》读书笔记之一:C#和.NET框架

    本篇已收录至<C#图解教程>读书笔记目录贴,点击访问该目录可获取更多内容. 一.在.NET之前的编程世界 C#语言是在微软公司的.NET框架上开发程序而设计的,首先作者给大家纠正了一下C# ...

  10. 【开源】开发者新闻聚合APP 2.0.3发布(第二个稳定版本)

    聚合了博客园新闻.infoq新闻.36kr新闻.oschina新闻.51cto新闻.csdn新闻: 争取做到随时刷随时有开发者的新闻! 目前还只支持安卓APP 但用的人多了,我会发布苹果版的APP 最 ...