利用opencv寻找乒乓球的坐标及大小
来源:互联网 发布:微博旅游博主数据统计 编辑:程序博客网 时间:2024/04/30 02:04
功能:打开USB摄像头读取图片,找出图像中黄色乒乓球,并返回球的坐标及半径(都是基于图像像素坐标的)
开发环境:ubuntu14.04 opencv-2.4.9
程序流程图:
/*程序可以将黄色的乒乓球,在光线不太亮的情况下,准确的识别出来,并返回圆心坐标 */
#include<opencv2/objdetect/objdetect.hpp>
#include<opencv2/highgui/highgui.hpp>
#include<opencv/cv.h>
#include<iostream>
#include<stdio.h>
using namespace std;
using namespace cv;
CvCapture* capture=0;
IplImage* image;
void Hough(IplImage*);
int main(void)
{
capture=cvCaptureFromCAM(0);
cvNamedWindow("result",1);
cvNamedWindow("f",2);
for(;;)
{
IplImage* image=cvQueryFrame(capture);
cvShowImage("f",image);
/*下面这个循环是预处理,将除了黄色的区域都变成黑色,方便圆的识别
首先提取图像的RGB值,if判断是否是黄色,如果不是将其变成黑色即R=0,G=0,B=0*/
for(int row=0;row<image->height;row++)
{
for(int col=0;col<image->widthStep;col=col+3)
{
int B = CV_IMAGE_ELEM(image, unsigned char, row, col*3+0);
int G = CV_IMAGE_ELEM(image, unsigned char, row, col*3+1);
int R = CV_IMAGE_ELEM(image, unsigned char, row, col*3+2);
if((B<=100)&&(G>=100)&&(G<=200)&&(R>200))
{
}
else
{
CV_IMAGE_ELEM(image, unsigned char, row, col*3+0) = 0;
CV_IMAGE_ELEM(image, unsigned char, row, col*3+1) = 0;
CV_IMAGE_ELEM(image, unsigned char, row, col*3+2) = 0;
}
}
}
cvShowImage("result",image);
Hough(image);
if(waitKey(10)>=0)
return 0;
}
}
/*将处理过的图像经过高斯变化后,找出圆,并返回圆心*/
void Hough(IplImage* img)
{
IplImage* gray=cvCreateImage(cvGetSize(img),8,1);
CvMemStorage* storage=cvCreateMemStorage(0);
cvCvtColor(img,gray,CV_BGR2GRAY);
cvSmooth(gray,gray,CV_GAUSSIAN,9,9);
CvSeq* circles=cvHoughCircles(gray,storage,CV_HOUGH_GRADIENT,2,gray->height/4,200,100);
int i;
cout<<circles->total;
for(i=0;i<circles->total;i++)
{
float* p=(float*)cvGetSeqElem(circles,i);
cvCircle(img,cvPoint(cvRound(p[0]),cvRound(p[1])),3,CV_RGB(0,255,0),-1,8,0);
cvCircle(img,cvPoint(cvRound(p[0]),cvRound(p[1])),cvRound(p[2]),CV_RGB(0,255,0),3,8,0);
cvNamedWindow("circles",2);
cvShowImage("circles",img);
cout<<"圆心坐标x="<<cvRound(p[0])<<endl<<"圆心坐标y="<<cvRound(p[1])<<endl;
cout<<"半径="<<cvRound(p[2])<<endl;
}
}
0 0
- 利用opencv寻找乒乓球的坐标及大小
- 利用opencv寻找乒乓球的坐标及大小
- 利用OpenCV找到图片中的乒乓球,返回球的圆心及半径,去除图片中非感兴趣区域
- OpenCV:利用级联的haar分类器寻找检测目标
- [Web 开发] 获取页面元素的坐标及大小
- 获取页面元素DIV的坐标及大小
- [Web 开发] 获取页面元素的坐标及大小
- [Web 开发] 获取页面元素的坐标及大小
- opencv的坐标原点
- OpenCV之利用鼠标获取坐标
- OpenCV之利用鼠标获取坐标
- 【算法+OpenCV】图像极坐标变换及基于OpenCV的实现
- 【算法+OpenCV】图像极坐标变换及基于OpenCV的实现
- OpenCV学习之利用级联的haar分类器寻找检测目标
- OpenCV—利用回调函数实现返回鼠标点击位置的坐标和灰度值
- 利用OpenCV鼠标事件设置函数setMouseCallback显示图像像素的RGB、HSV和坐标值!
- OpenCV坐标体系的初步
- 利用OpenCV修改图像大小,转换图像格式
- Codeforces Round #206 (Div. 2)
- POJ3624Charm Bracelet,用到了滚动数组(AC)
- SQL语句中where 1=1的作用(正解)
- SpringMVC 基础配置
- Eclipse J2EE Maven 配置
- 利用opencv寻找乒乓球的坐标及大小
- 问一个低级问题:头文件包含#include有何作用与意义?
- 硅谷再次拥抱人工智能,真的是新纪元的开始?
- python运算符
- 结构体 "->" 和 “." 有什么区别 网上看到的 自己记下
- HTML 列表切换
- 如何做一个让人看得起的测试人员
- iOS树状视图(折叠单元格)详细使用
- IOS开发错误记录之Quartz绘图出来不是线而是点的原因