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语言自动生成MAC地址

    怎么通过C语言自动生成MAC地址

    以下是对使用C语言自动生成MAC地址的实现代码进行了详细的分析介绍,需要的朋友可以过来参考下
    2013-09-09
  • C++基于栈实现铁轨问题

    C++基于栈实现铁轨问题

    这篇文章主要介绍了C++基于栈实现铁轨问题,实例分析了C++使用栈实现铁轨问题的思路与解决方法,具有一定参考借鉴价值,需要的朋友可以参考下
    2015-04-04
  • 浅析C++模板类型中的原样转发和可变参数的实现

    浅析C++模板类型中的原样转发和可变参数的实现

    可变参数模板(variadic templates)是C++11新增的强大的特性之一,它对模板参数进行了高度泛化,能表示0到任意个数、任意类型的参数,这篇文章主要介绍了C++可变参数模板的展开方式,需要的朋友可以参考下
    2022-08-08
  • C++程序检测内存泄漏的方法分享

    C++程序检测内存泄漏的方法分享

    这篇文章主要介绍了C++程序检测内存泄漏的方法分享,本文讲解了、对象计数、重载new和delete、Hook Windows系统API、使用DiagLeak检测等内容,需要的朋友可以参考下
    2015-03-03
  • 高效实现整型数字转字符串int2str的方法

    高效实现整型数字转字符串int2str的方法

    下面小编就为大家带来一篇高效实现整型数字转字符串int2str的方法。小编觉得挺不错的,现在就分享给大家,也给大家做个参考。一起跟随小编过来看看吧
    2017-03-03
  • C++类和对象基础详解

    C++类和对象基础详解

    类是创建对象的模板,一个类可以创建多个对象,每个对象都是类类型的一个变量;创建对象的过程也叫类的实例化。每个对象都是类的一个具体实例(Instance),拥有类的成员变量和成员函数
    2021-08-08
  • 一文掌握C语言中的柔性数组

    一文掌握C语言中的柔性数组

    柔性数组在C语言的 C99 标准中,引入的新特性,结构中的最后一个元素的大小允许是未知的数组,即为柔性数组,本文给大家介绍c语言中的柔性数组,感兴趣的朋友跟随小编一起看看吧
    2024-03-03
  • C++的array和&array有什么区别

    C++的array和&array有什么区别

    本文主要介绍了C++的array和&array有什么区别,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧
    2022-08-08
  • C++中引用的使用总结

    C++中引用的使用总结

    以下是对C++中引用的使用进行了详细的总结介绍,需要的朋友可以过来参考下,希望对大家有所帮助
    2013-10-10
  • 剑指offer之C++语言实现链表(两种删除节点方式)

    剑指offer之C++语言实现链表(两种删除节点方式)

    今天小编就为大家分享一篇关于剑指offer之C++语言实现链表(两种删除节点方式),小编觉得内容挺不错的,现在分享给大家,具有很好的参考价值,需要的朋友一起跟随小编来看看吧
    2019-02-02

最新评论