(44)Air Band OpenCV2.4.13_点-多边形检测
来源:互联网 发布:单片机工作过程 编辑:程序博客网 时间:2024/06/01 08:13
本文是对OpenCV2.4.13文档的部分翻译,作个人学习之用,并不完整。
#include "opencv2/highgui/highgui.hpp"#include "opencv2/imgproc/imgproc.hpp"#include <iostream>#include <stdio.h>#include <stdlib.h>using namespace cv;using namespace std;/** * @function main */int main(){ /// 创建图像 const int r = 100; Mat src = Mat::zeros( Size( 4*r, 4*r ), CV_8UC1 ); /// 创建点序列来形成轮廓 vector<Point2f> vert(6); vert[0] = Point( 3*r/2, static_cast<int>(1.34*r) ); vert[1] = Point( 1*r, 2*r ); vert[2] = Point( 3*r/2, static_cast<int>(2.866*r) ); vert[3] = Point( 5*r/2, static_cast<int>(2.866*r) ); vert[4] = Point( 3*r, 2*r ); vert[5] = Point( 5*r/2, static_cast<int>(1.34*r) ); /// 在原图像中画出 for( int j = 0; j < 6; j++ ) { line( src, vert[j], vert[(j+1)%6], Scalar( 255 ), 3, 8 ); } /// 得到边缘 vector<vector<Point> > contours; vector<Vec4i> hierarchy; Mat src_copy = src.clone(); findContours( src_copy, contours, hierarchy, RETR_TREE, CHAIN_APPROX_SIMPLE); /// 计算到轮廓的距离 Mat raw_dist( src.size(), CV_32FC1 ); for( int j = 0; j < src.rows; j++ ) { for( int i = 0; i < src.cols; i++ ) { raw_dist.at<float>(j,i) = (float)pointPolygonTest( contours[0], Point2f((float)i,(float)j), true ); } } double minVal; double maxVal; minMaxLoc( raw_dist, &minVal, &maxVal, 0, 0, Mat() ); minVal = abs(minVal); maxVal = abs(maxVal); /// 几何上描述距离 Mat drawing = Mat::zeros( src.size(), CV_8UC3 ); for( int j = 0; j < src.rows; j++ ) { for( int i = 0; i < src.cols; i++ ) { if( raw_dist.at<float>(j,i) < 0 ) { drawing.at<Vec3b>(j,i)[0] = (uchar)(255 - abs(raw_dist.at<float>(j,i))*255/minVal); } else if( raw_dist.at<float>(j,i) > 0 ) { drawing.at<Vec3b>(j,i)[2] = (uchar)(255 - raw_dist.at<float>(j,i)*255/maxVal); } else { drawing.at<Vec3b>(j,i)[0] = 255; drawing.at<Vec3b>(j,i)[1] = 255; drawing.at<Vec3b>(j,i)[2] = 255; } } } /// 创建窗口显示结果 const char* source_window = "Source"; namedWindow( source_window, WINDOW_AUTOSIZE ); imshow( source_window, src ); namedWindow( "Distance", WINDOW_AUTOSIZE ); imshow( "Distance", drawing ); waitKey(0); return(0);}结果:
0 0
- (44)Air Band OpenCV2.4.13_点-多边形检测
- (29)Air Band OpenCV2.4.13_Canny边缘检测
- (11)Air Band OpenCV2.4.13_矩阵掩码操作
- (12)Air Band OpenCV2.4.13_将两幅图片叠加
- (14)Air Band OpenCV2.4.13_基础作图
- (16)Air Band OpenCV2.4.13_离散傅里叶变换
- (19)Air Band OpenCV2.4.13_平滑图像
- (20)Air Band OpenCV2.4.13_腐蚀和膨胀
- (21)Air Band OpenCV2.4.13_其他形态学变换
- (22)Air Band OpenCV2.4.13_图像金字塔
- (23)Air Band OpenCV2.4.13_基本阈值操作
- (24)Air Band OpenCV2.4.13_自定义线性滤波器
- (25)Air Band OpenCV2.4.13_为图像添加边界
- (32)Air Band OpenCV2.4.13_重映射
- (34)Air Band OpenCV2.4.13_直方图均衡化
- (35)Air Band OpenCV2.4.13_直方图计算
- (36)Air Band OpenCV2.4.13_直方图比较
- (37)Air Band OpenCV2.4.13_反向投影
- pyFormUI: 一个简单的Python GUI界面框架
- web前端记录
- __attribute__((visibility("default")))
- 安卓基础知识二
- 自定义圆形的ImageVIew
- (44)Air Band OpenCV2.4.13_点-多边形检测
- java8时间转换函数学习,教你脱离jdf转换的痛苦
- 从MediaPlayerServic出发查看服务注册交互流程
- java反射之Class初级用法
- 云数据库 MongoDB 版
- hdu 2072 单词数(C++的stringstream对象)
- java 内存模型简单理解
- 玩转linux主机--redis
- L1-021. 重要的话说三遍