Opencv实现对象提取与测量

 更新时间:2019年05月21日 10:54:17   作者:东城青年  
这篇文章主要为大家详细介绍了基于Opencv实现对象提取与测量,具有一定的参考价值,感兴趣的小伙伴们可以参考一下

本文实例为大家分享了Opencv3实现对象提取与测量的具体代码,供大家参考,具体内容如下

案例背景:下图为一张卫星拍摄的图片,要获取其中岛屿的周长和面积

方案思路:高斯模糊去噪,灰度二值化提取轮廓,闭操作填充缝隙 或小的孔洞,寻找轮廓,通过轮廓特征选择轮廓

#include<opencv2\opencv.hpp>
using namespace cv;
using namespace std;
int main(int arc, char** argv) { 
 Mat src = imread("1.jpg");
 namedWindow("input", CV_WINDOW_AUTOSIZE);
 imshow("input", src);
 //该高斯模糊去噪
 GaussianBlur(src, src, Size(15, 15), 0, 0);
 imshow("output1", src);
 //灰度二值化
 Mat gray,binary;
 cvtColor(src, gray, CV_BGR2GRAY);
 threshold(gray, binary, 0, 255, THRESH_BINARY | THRESH_TRIANGLE);
 imshow("output2", binary);
 //闭操作
 Mat kernel = getStructuringElement(MORPH_RECT, Size(4, 4));
 morphologyEx(binary, binary, MORPH_CLOSE, kernel);
 imshow("output3", binary);
 //寻找轮廓
 vector<vector<Point>>contours;
 Mat draw = Mat::zeros(src.size(), CV_8UC3);
 findContours(binary, contours, RETR_EXTERNAL, CHAIN_APPROX_SIMPLE);
 for (int i = 0; i < contours.size(); i++) {
 Rect rect = boundingRect(contours[i]);
 if (rect.width < src.cols / 2 || rect.height>src.rows-20)continue;//筛选轮廓
 drawContours(draw, contours, i, Scalar(0, 0, 255), 1);
 printf("area:%f\n", contourArea(contours[i]));
 printf("length:%f\n",arcLength(contours[i],true));
 }
 imshow("output4", draw);
 waitKey(0);
 return 0;
}

原图像

高斯模糊

二值化

闭操作

效果图

以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持脚本之家。

相关文章

  • C++多态的全面讲解

    C++多态的全面讲解

    多态按字面的意思就是多种形态。当类之间存在层次结构,并且类之间是通过继承关联时,就会用到多态。C++ 多态意味着调用成员函数时,会根据调用函数的对象的类型来执行不同的函数
    2022-06-06
  • C++ 中 const和static readonly区别

    C++ 中 const和static readonly区别

    这篇文章主要介绍了C++ 中 const和static readonly区别的相关资料,需要的朋友可以参考下
    2017-05-05
  • C++中拷贝构造函数的使用

    C++中拷贝构造函数的使用

    大家好,本篇文章主要讲的是C++中拷贝构造函数的使用,感兴趣的同学赶快来看一看吧,对你有帮助的话记得收藏一下
    2022-02-02
  • C++实现高校人员信息管理系统

    C++实现高校人员信息管理系统

    这篇文章主要为大家详细介绍了C++实现高校人员信息管理系统项,文中示例代码介绍的非常详细,具有一定的参考价值,感兴趣的小伙伴们可以参考一下
    2021-06-06
  • C++中delete和delete[]的区别详细介绍

    C++中delete和delete[]的区别详细介绍

    一直对C++中的delete和delete[]的区别不甚了解,今天遇到了,上网查了一下,得出了结论,拿出来和大家分享一下
    2012-11-11
  • MFC命名规则汇总

    MFC命名规则汇总

    这篇文章主要介绍了MFC命名规则,对于初学者而言需要牢固掌握这类规则,需要的朋友可以参考下
    2014-07-07
  • Qt实现部件透明及阴影效果的示例代码

    Qt实现部件透明及阴影效果的示例代码

    本文主要介绍了Qt实现部件透明及阴影效果的示例代码,文中通过示例代码介绍的非常详细,具有一定的参考价值,感兴趣的小伙伴们可以参考一下
    2022-01-01
  • QT实现多线程两种方式案例详解

    QT实现多线程两种方式案例详解

    这篇文章主要介绍了QT实现多线程两种方式案例详解,本篇文章通过简要的案例,讲解了该项技术的了解与使用,以下就是详细内容,需要的朋友可以参考下
    2021-08-08
  • 快速学习六大排序算法

    快速学习六大排序算法

    这篇文章主要介绍了六大排序算法-插入排序、希尔排序、选择排序、冒泡排序、堆排序、快速排序,需要学习的小伙伴可以参考这篇文章
    2021-08-08
  • C语言编程中统计输入的行数以及单词个数的方法

    C语言编程中统计输入的行数以及单词个数的方法

    这篇文章主要介绍了C语言编程中统计输入的行数以及单词个数的方法,利用最基础的循环和判断语句写成,需要的朋友可以参考下
    2015-11-11

最新评论