opencv学习之寻找轮廓并绘制轮廓
来源:互联网 发布:智联招聘java简历模板 编辑:程序博客网 时间:2024/05/22 06:45
// opencv_1.cpp : 定义控制台应用程序的入口点。#include "stdafx.h"#include<iostream>#include<opencv2/opencv.hpp>#include<opencv2/highgui/highgui.hpp>#include<opencv2/imgproc/imgproc.hpp>using namespace cv;using namespace std;int main(){system("color 1A");Mat srcImage = imread("E:\\pictures\\For_Project\\New_opencv\\sunsun.jpg",0);if (!srcImage.data) {cout << "读取图片错误,请确定该目录下是否存在该对应图片。" << endl;return false;}imshow("【原图二值图】", srcImage);//初始化结果图Mat dstImage = Mat::zeros(srcImage.rows, srcImage.cols, CV_8UC3);//srcImage取阈值大于119的部分srcImage = srcImage > 119;imshow("【阈值原图】", srcImage);//定义轮廓和层次结构vector<vector<Point>> contours;vector<Vec4i> hierarchy;//查找轮廓findContours(srcImage, contours, hierarchy, RETR_CCOMP, CHAIN_APPROX_SIMPLE);//遍历所有顶层的轮廓,随机绘制颜色,绘制出每个连接组件的颜色int index = 0;for (;index >= 0;index = hierarchy[index][0]) {Scalar color(rand() & 255, rand() & 255, rand() & 255);drawContours(dstImage, contours, index, color, FILLED, 8, hierarchy);}imshow("【轮廓图】", dstImage);while((char)waitKey(0)!='q'){} return 0;}
综合例子:
// opencv_1.cpp : 定义控制台应用程序的入口点。#include "stdafx.h"#include<iostream>#include<opencv2/opencv.hpp>#include<opencv2/highgui/highgui.hpp>#include<opencv2/imgproc/imgproc.hpp>using namespace cv;using namespace std;#define WINDOW_NAME_1 "【原始窗口】"#define WINDOW_NAME_2 "【轮廓图】"Mat g_srcImage, g_grayImage;int g_nThresh = 80;int g_nThresh_max = 255;RNG g_rng(12345);Mat g_cannyMat_output;vector<vector<Point>> g_vContours;vector<Vec4i> g_vHierarchy;void on_ThreshChange(int, void*);int main(){system("color 1A");Mat srcImage = imread("E:\\pictures\\For_Project\\New_opencv\\Lena.jpg",1);if (!srcImage.data) {cout << "读取图片错误,请确定该目录下是否存在该对应图片。" << endl;return false;}imshow("【原图二值图】", srcImage);g_srcImage = srcImage.clone();//转化为灰度图并模糊化降噪cvtColor(g_srcImage, g_grayImage, COLOR_BGR2GRAY);blur(g_grayImage, g_grayImage, Size(3, 3));//创建窗口namedWindow(WINDOW_NAME_1, WINDOW_AUTOSIZE);imshow(WINDOW_NAME_1, g_srcImage);//创建滚动条并初始化createTrackbar("canny阈值", WINDOW_NAME_1, &g_nThresh, g_nThresh_max, on_ThreshChange);on_ThreshChange(0, 0);while((char)waitKey(0)!='q'){} return 0;}void on_ThreshChange(int, void*) {//使用canny算子检测边缘Canny(g_grayImage, g_cannyMat_output, g_nThresh, g_nThresh * 2, 3);//寻找轮廓findContours(g_cannyMat_output, g_vContours, g_vHierarchy, RETR_TREE, CHAIN_APPROX_SIMPLE, Point(0, 0));//绘制轮廓Mat drawing = Mat::zeros(g_cannyMat_output.size(), CV_8UC3);for (int i = 0;i < g_vContours.size();i++) {Scalar color = Scalar(g_rng.uniform(0, 255), g_rng.uniform(0, 255), g_rng.uniform(0, 255));drawContours(drawing, g_vContours, i, color, 2, 8, g_vHierarchy, 0, Point());}imshow(WINDOW_NAME_2, drawing);}
0 0
- opencv学习之寻找轮廓并绘制轮廓
- Opencv学习之查找并绘制轮廓
- OpenCV: 寻找图像轮廓并绘制
- OpenCV: 寻找图像轮廓并绘制
- opencv学习之findcounters 寻找轮廓
- opencv学习笔记 在输入图像上寻找并绘制轮廓
- opencv 查找并绘制轮廓
- opencv 查找轮廓 绘制轮廓
- opencv找轮廓线并绘制轮廓线
- opencv: 绘制矩形轮廓框,并记录轮廓框坐标
- 使用OpenCV的函数findContours提取轮廓并绘制轮廓
- opencv学习之寻找凸包,使用多边形包围轮廓
- opencv学习(四十)之寻找图像轮廓findContours()
- opencv轮廓检测并绘制椭圆
- OpenCV:查找并绘制图像的轮廓
- opencv寻找轮廓源代码
- opencv寻找轮廓
- opencv之轮廓的查找与绘制
- Ubuntu 14.04连接上WiFi却无法上网
- Python2自动转Python3
- URL去重思路
- 1.28.1
- 习题八
- opencv学习之寻找轮廓并绘制轮廓
- POJ 3253-Fence Repair(哈夫曼树-最小值优先队列)
- CentOS各种配置步骤与所涉及Linux命令
- 网络流学习记录
- batch 批处理
- Lua与C/C++的交互
- 对称的二叉树(二叉树的镜像操作)
- STL学习:set
- 2016年--放空的日子