我是靠谱客的博主 飘逸高山,最近开发中收集的这篇文章主要介绍基于OpenCV的轮廓的检测与绘制,觉得挺不错的,现在分享给大家,希望可以做个参考。

概述

项目基本框架:
输入图像-》预处理-》输出图像

输入图像:imread()
预处理:
(1)转为灰度图
(2)平滑滤波(中值滤波、均值滤波、高斯滤波)
(3)二值化(阈值化)(OTSU大律法自适应二值化、TRIANGLE三角形法自适应二值化)
(4)发现轮廓(findContours())
(5)绘制轮廓
(6)输出轮廓结构描述

输出图像:imshow()

结果:

 源码:

// MyContours.cpp : 定义控制台应用程序的入口点。
//轮廓检测与绘制

#include "stdafx.h"
#include <iostream>
#include <opencv.hpp>
using namespace std;
using namespace cv;

int main()
{
	system("color F1");
	Mat img = imread("E:\study\OpenCV\picture\12.jpg");
	if (!img.data) {
		cout << "图像载入异常" << endl;
		system("pause");
		return -1;

	}	
	namedWindow("原图", WINDOW_NORMAL);

	imshow("原图", img);
	Mat gray, binary;

	//(1)转灰度图
	cvtColor(img, gray, COLOR_BGR2GRAY);

	//滤波处理(高斯滤波)
	GaussianBlur(gray, gray, Size(13, 13), 4, 4);
	
	//大律法自适应二值化
	threshold(gray, binary, 170, 255, THRESH_BINARY | THRESH_OTSU);

	//发现轮廓
	vector<vector<Point>> contours;//轮廓
	vector<Vec4i>hierarchy;//存放轮廓的结构变量
	findContours(binary, contours, hierarchy, RETR_TREE, CHAIN_APPROX_SIMPLE, Point());

	//绘制轮廓
	for (int t = 0; t < contours.size(); t++) {
		drawContours(img, contours, t, Scalar(0, 0, 255), 2, 8);
	}
	//输出轮廓结构描述
	for (int i = 0; i < hierarchy.size(); i++) {
		cout << hierarchy[i] << endl;
	}
	namedWindow("binary", WINDOW_NORMAL);
	imshow("binary", binary);

	namedWindow("gray", WINDOW_NORMAL);
	imshow("gray", gray);

	namedWindow("轮廓检测结果", WINDOW_NORMAL);
	imshow("轮廓检测结果", img);
	waitKey(0);

	return 0;
}

最后

以上就是飘逸高山为你收集整理的基于OpenCV的轮廓的检测与绘制的全部内容,希望文章能够帮你解决基于OpenCV的轮廓的检测与绘制所遇到的程序开发问题。

如果觉得靠谱客网站的内容还不错,欢迎将靠谱客网站推荐给程序员好友。

本图文内容来源于网友提供,作为学习参考使用,或来自网络收集整理,版权属于原作者所有。
点赞(56)

评论列表共有 0 条评论

立即
投稿
返回
顶部