(43)Air Band OpenCV2.4.13_图像矩
来源:互联网 发布:linux pip apt get 编辑:程序博客网 时间:2024/05/16 10:15
本文是对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;Mat src; Mat src_gray;int thresh = 100;int max_thresh = 255;RNG rng(12345);/// Function headervoid thresh_callback(int, void* );/** * @function main */int main(){ /// 载入图像 src = imread( "stuff.jpg", 1 ); /// 转换为灰度图并模糊处理 cvtColor( src, src_gray, COLOR_BGR2GRAY ); blur( src_gray, src_gray, Size(3,3) ); /// 创建窗口 const char* source_window = "Source"; namedWindow( source_window, WINDOW_AUTOSIZE ); imshow( source_window, src ); createTrackbar( " Canny thresh:", "Source", &thresh, max_thresh, thresh_callback ); thresh_callback( 0, 0 ); waitKey(0); return(0);}/** * @function thresh_callback */void thresh_callback(int, void* ){ Mat canny_output; vector<vector<Point> > contours; vector<Vec4i> hierarchy; /// 用Canny检测边缘 Canny( src_gray, canny_output, thresh, thresh*2, 3 ); /// 找到轮廓 findContours( canny_output, contours, hierarchy, CV_RETR_TREE, CV_CHAIN_APPROX_SIMPLE, Point(0, 0) ); /// 得到矩 vector<Moments> mu(contours.size() ); for( size_t i = 0; i < contours.size(); i++ ) { mu[i] = moments( contours[i], false ); } /// 得到物体中心位置 vector<Point2f> mc( contours.size() ); for( size_t i = 0; i < contours.size(); i++ ) { mc[i] = Point2f( static_cast<float>(mu[i].m10/mu[i].m00) , static_cast<float>(mu[i].m01/mu[i].m00) ); } /// 画出轮廓 Mat drawing = Mat::zeros( canny_output.size(), CV_8UC3 ); for( size_t i = 0; i< contours.size(); i++ ) { Scalar color = Scalar( rng.uniform(0, 255), rng.uniform(0,255), rng.uniform(0,255) ); drawContours( drawing, contours, (int)i, color, 2, 8, hierarchy, 0, Point() ); circle( drawing, mc[i], 4, color, -1, 8, 0 ); } /// 在窗口中显示 namedWindow( "Contours", WINDOW_AUTOSIZE ); imshow( "Contours", drawing ); /// 计算矩为00的区域并与OpenCV函数的结果比较 printf("\t Info: Area and Contour Length \n"); for( size_t i = 0; i< contours.size(); i++ ) { printf(" * Contour[%d] - Area (M_00) = %.2f - Area OpenCV: %.2f - Length: %.2f \n", (int)i, mu[i].m00, contourArea(contours[i]), arcLength( contours[i], true ) ); Scalar color = Scalar( rng.uniform(0, 255), rng.uniform(0,255), rng.uniform(0,255) ); drawContours( drawing, contours, (int)i, color, 2, 8, hierarchy, 0, Point() ); circle( drawing, mc[i], 4, color, -1, 8, 0 ); }}结果:
0 0
- (43)Air Band OpenCV2.4.13_图像矩
- (19)Air Band OpenCV2.4.13_平滑图像
- (22)Air Band OpenCV2.4.13_图像金字塔
- (25)Air Band OpenCV2.4.13_为图像添加边界
- (10)Air Band OpenCV2.4.13_浏览图像、查表、时间度量
- (13)Air Band OpenCV2.4.13_改变图像对比度和亮度
- (11)Air Band OpenCV2.4.13_矩阵掩码操作
- (12)Air Band OpenCV2.4.13_将两幅图片叠加
- (14)Air Band OpenCV2.4.13_基础作图
- (16)Air Band OpenCV2.4.13_离散傅里叶变换
- (20)Air Band OpenCV2.4.13_腐蚀和膨胀
- (21)Air Band OpenCV2.4.13_其他形态学变换
- (23)Air Band OpenCV2.4.13_基本阈值操作
- (24)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_直方图比较
- Android Fragment 你应该知道的一切
- jsp基础语法(二)
- servlet中输出js
- java自适应响应式 企业网站源码 SSM 生成静态化 手机 平板 PC
- 【Android 数据库框架总结,总有一个适合你!】
- (43)Air Band OpenCV2.4.13_图像矩
- 存储管理相关的基本概念
- Struts2和Spring整合:NullPointerException
- 百度文库等类似工具的免费下载工具
- JZOJ 3631. 【汕头市选2014】三角(triangle)
- PL/SQL developer基础语法学习(一)
- Java 绘图技术
- C++ string的操作函数
- Sicily Huffman coding | 优先队列