arcLength函数[通俗易懂]

arcLength函数[通俗易懂]1、arcLength函数函数的作用主要是计算图像轮廓的周长、2、函数调用形式C++: double arcLength(InputArray curve,bool closed)参数详解:Input…

大家好,又见面了,我是你们的朋友全栈君。

1、arcLength函数

函数的作用

主要是计算图像轮廓的周长、

2、函数调用形式

C++: double arcLength(InputArray curve, bool closed)

参数详解:

InputArray curve:表示图像的轮廓

bool closed:表示轮廓是否封闭的

3、一般图像轮廓矩也可以算出图像的周长和面积

opencv代码:


   
   
   
  1. #include “opencv2/highgui/highgui.hpp”
  2. #include “opencv2/imgproc/imgproc.hpp”
  3. #include <iostream>
  4. #include <stdio.h>
  5. #include <stdlib.h>
  6. using namespace cv;
  7. using namespace std;
  8. Mat src; Mat src_gray;
  9. int thresh = 100;
  10. int max_thresh = 255;
  11. RNG rng(12345);
  12. /// 函数声明
  13. void thresh_callback(int, void* );
  14. /** @主函数 */
  15. int main( int argc, char** argv )
  16. {
  17. /// 读入原图像, 返回3通道图像数据
  18. src = imread( argv[ 1], 1 );
  19. /// 把原图像转化成灰度图像并进行平滑
  20. cvtColor( src, src_gray, CV_BGR2GRAY );
  21. blur( src_gray, src_gray, Size( 3, 3) );
  22. /// 创建新窗口
  23. char* source_window = “Source”;
  24. namedWindow( source_window, CV_WINDOW_AUTOSIZE );
  25. imshow( source_window, src );
  26. createTrackbar( ” Canny thresh:”, “Source”, &thresh, max_thresh, thresh_callback );
  27. thresh_callback( 0, 0 );
  28. waitKey( 0);
  29. return( 0);
  30. }
  31. /** @thresh_callback 函数 */
  32. void thresh_callback(int, void* )
  33. {
  34. Mat canny_output;
  35. vector< vector<Point> > contours;
  36. vector<Vec4i> hierarchy;
  37. /// 使用Canndy检测边缘
  38. Canny( src_gray, canny_output, thresh, thresh* 2, 3 );
  39. /// 找到轮廓
  40. findContours( canny_output, contours, hierarchy, CV_RETR_TREE, CV_CHAIN_APPROX_SIMPLE, Point( 0, 0) );
  41. /// 计算矩
  42. vector<Moments> mu(contours.size() );
  43. for( int i = 0; i < contours.size(); i++ )
  44. { mu[i] = moments( contours[i], false ); }
  45. /// 计算中心矩:
  46. vector<Point2f> mc( contours.size() );
  47. for( int i = 0; i < contours.size(); i++ )
  48. { mc[i] = Point2f( mu[i].m10/mu[i].m00 , mu[i].m01/mu[i].m00 ); }
  49. /// 绘制轮廓
  50. Mat drawing = Mat::zeros( canny_output.size(), CV_8UC3 );
  51. for( int i = 0; i< contours.size(); i++ )
  52. {
  53. Scalar color = Scalar( rng.uniform( 0, 255), rng.uniform( 0, 255), rng.uniform( 0, 255) );
  54. drawContours( drawing, contours, i, color, 2, 8, hierarchy, 0, Point() );
  55. circle( drawing, mc[i], 4, color, -1, 8, 0 );
  56. }
  57. /// 显示到窗口中
  58. namedWindow( “Contours”, CV_WINDOW_AUTOSIZE );
  59. imshow( “Contours”, drawing );
  60. /// 通过m00计算轮廓面积并且和OpenCV函数比较
  61. printf( “\t Info: Area and Contour Length \n”);
  62. for( int i = 0; i< contours.size(); i++ )
  63. {
  64. printf( ” * Contour[%d] - Area (M_00) = %.2f - Area OpenCV: %.2f - Length: %.2f \n”, i, mu[i].m00, contourArea(contours[i]), arcLength( contours[i], true ) );
  65. Scalar color = Scalar( rng.uniform( 0, 255), rng.uniform( 0, 255), rng.uniform( 0, 255) );
  66. drawContours( drawing, contours, i, color, 2, 8, hierarchy, 0, Point() );
  67. circle( drawing, mc[i], 4, color, -1, 8, 0 );
  68. }
  69. }

            </div>
版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请联系我们举报,一经查实,本站将立刻删除。

发布者:全栈程序员-站长,转载请注明出处:https://javaforall.net/132125.html原文链接:https://javaforall.net

(0)
上一篇 2022年6月11日 上午10:46
下一篇 2022年6月11日 上午11:00


相关推荐

  • VC编程实现色彩空间XYZ与LAB相互转换[通俗易懂]

    VC编程实现色彩空间XYZ与LAB相互转换[通俗易懂]VC编程实现色彩空间XYZ与LAB相互转换文章VC编程实现色彩空间RGB与XYZ相互转换已经介绍了RGB与XYZ色彩空间的转换算法以及实际的VC源代码,在上一篇文章已经提到,在PhotoShop中经常使用有RGB(红色、绿色、蓝色)、CMYK(青色、洋红、黄色、黑色)、HSB(色相、饱和度、亮度)和Lab4中色彩空间。我们用到XYZ色彩空间的目的是进行RGB与LAB色彩空

    2022年6月19日
    42
  • 阅读Java菜鸟教程总结(一):基础篇1[通俗易懂]

    阅读Java菜鸟教程总结(一):基础篇1[通俗易懂]一、Java的主函数细节String[]args表示从控制台接收参数。main方法声明为static的原因是为了让主函数不依赖类的对象,在类加载的时候主函数也随着被加载到主存中。三、Java编程的三个特性三、设置环境变量时,三个变量的含义常见的DOS命令操作:四、关键字和保留字Java中默认的带有小数的是双精度的,如果要声明为float…

    2022年6月28日
    30
  • 并发编程模式

    并发编程模式一 future 模式在网上购物时 提交订单后 在收货的这段时间里无需一直在家里等候 可以先干别的事情 类推到程序设计中时 当提交请求时 期望得到答复时 如果这个答复可能很慢 传统的是一直等待到这个答复收到时再去做别的事情 但如果利用 Future 设计模式就无需等待答复的到来 在等待答复的过程中可以干其他事情 future 模式核心思想就是异步调用 去除了主函数的等待时间 并使得原本需要等待的时

    2026年3月18日
    2
  • OpenClaw 腾讯云部署全教程:镜像一键、无需命令行

    OpenClaw 腾讯云部署全教程:镜像一键、无需命令行

    2026年3月14日
    2
  • 快速排序(java实现)

    快速排序(java实现)高快省的排序算法有没有既不浪费空间又可以快一点的排序算法呢?那就是“快速排序”啦!光听这个名字是不是就觉得很高端呢。假设我们现在对“61279345108”这个10个数进行排序。首先在这个序列中随便找一个数作为基准数(不要被这个名词吓到了,就是一个用来参照的数,待会你就知道它用来做啥的了)。为了方便,就让第一个数6作为基准数吧。接下来,需要将这个序列中所有比基准数大的数放…

    2022年6月29日
    24
  • SpringCloud2.0

    SpringCloud2.0

    2021年7月3日
    102

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注

关注全栈程序员社区公众号