基于OpenCV的标志点检测
来源:互联网 发布:2015大麦户源码 编辑:程序博客网 时间:2024/06/11 00:03
机器视觉中所用的标志点一般为圆形,圆形标志点会因拍摄角度的问题而在图像中呈现椭圆形,因此标志点检测一般是指椭圆检测,目的是获得标志点圆心坐标。OpenCV实现如下,编程环境为Qt5.3.2.
需要包含的OpenCV头文件如下:
#include <opencv/cv.h>#include <opencv/highgui.h>#include <opencv2/imgproc/imgproc.hpp>#include <math.h>
源文件内容:
int sliderPos = 60;//图像二值化阈值int sizeLimit = 8;//设置检出圆的大小下限,小于此值的圆认为不是标志点,过滤掉Mat image;void processImage(int, void*);HWidget::HWidget(QWidget *parent) : QWidget(parent){ image = imread("D:/1.png",0); imshow("source", image); namedWindow("result", WINDOW_AUTOSIZE); // Create toolbars. HighGUI use. createTrackbar( "threshold", "result", &sliderPos, 255, processImage ); createTrackbar( "sizehold", "result", &sizeLimit, 20, processImage ); processImage(0, 0); // Wait for a key stroke; the same function arranges events processing waitKey(); }
// Define trackbar callback functon. This function find contours,// draw it and approximate it by ellipses.void processImage(int /*h*/, void*){ vector<vector<Point> > contours; Mat bimage = image >= sliderPos; findContours(bimage, contours, CV_RETR_LIST, CV_CHAIN_APPROX_NONE); Mat cimage = Mat::zeros(bimage.size(), CV_8UC3); for(size_t i = 0; i < contours.size(); i++) { size_t count = contours[i].size(); if( count < 6 ) continue; Mat pointsf; Mat(contours[i]).convertTo(pointsf, CV_32F); RotatedRect box = fitEllipse(pointsf); if( MAX(box.size.width, box.size.height) > MIN(box.size.width, box.size.height)*1.5 ) continue; if(box.size.width <= sizeLimit || box.size.height <= sizeLimit) continue; if(box.size.width > 30 || box.size.height > 30) continue; drawContours(cimage, contours, (int)i, Scalar::all(255), 1, 8); ellipse(cimage, box, Scalar(0,0,255), 1, CV_AA); ellipse(cimage, box.center, box.size*0.5f, box.angle, 0, 360, Scalar(0,255,255), 1, CV_AA); Point2f vtx[4]; box.points(vtx); for( int j = 0; j < 4; j++ ) line(image, vtx[j], vtx[(j+1)%4], Scalar(0,255,0), 1, CV_AA); } imshow("result", cimage);}
int main(int argc, char *argv[]){ QApplication a(argc, argv); HWidget w; return a.exec();}
程序检测结果:
0 0
- 基于OpenCV的标志点检测
- 基于opencv的角点检测
- 基于OpenCV的harris角点检测
- 13基于opencv的角点检测cornerHairris
- 14基于opencv的重映射_SURF特征点检测
- 基于opencv的皮肤检测
- 基于opencv的肤色检测
- 基于opencv的边缘检测
- opencv<三>基于opencv的canny检测
- 相机模型与标定(十二)--opencv圆形标志点检测算法
- Matlab和C++联合编程(基于opencv的特征点检测)
- Android下使用jni实现基于opencv与dlib的68关键点检测
- 15基于opencv的旋转_仿射变换_SURF特征点检测
- android openCV检测图像的基本特征,包括Canny边缘检测、Harris角点检测、霍夫直线检测-基于Android studio
- OpenCV 大特征值的角点检测
- opencv-创建自己的角点检测
- opencv-创建自己的角点检测
- OpenCV的susan角点检测
- openstack, kvm, qemu-kvm以及libvirt之关系
- mfc拖拉文件
- android 圆角边框、渐变背景的TextView
- iOS AFNetworking 使用
- Refreshing service 'service'. Problem retrieving the repository index file for service 'servic
- 基于OpenCV的标志点检测
- 创业视角:人工智能或打码软件---TOMsInsight 2014.06.10
- C++运算符重载
- 用深度卷积网络实现图像超分辨率
- SQL数据库
- IOS基本控件常用属性及方法(二)---UITextView
- 互联网黑市分析:信封号产业链---TOMsInsight 2014-06-20
- 开发工具之Eclipse(二)
- 深入浅出URL编码