概述
项目基本框架:
输入图像-》预处理-》输出图像
输入图像: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的轮廓的检测与绘制所遇到的程序开发问题。
如果觉得靠谱客网站的内容还不错,欢迎将靠谱客网站推荐给程序员好友。
本图文内容来源于网友提供,作为学习参考使用,或来自网络收集整理,版权属于原作者所有。
发表评论 取消回复