#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;
//opencv2.4.11 vs2010
int main( )
{
Mat Image=imread("a.jpg"); //载入图像到Mat
namedWindow("乒乓球"); //创建一个名为 "【1】动漫图"的窗口
imshow("乒乓球",Image);
Mat image;
blur(Image,image,Size(10,10));
Vec3b RGB;
for(int i=0;i<image.rows;i++) // 长
{
for(int j=0;j<image.cols;j++) //宽
{
RGB=image.at<Vec3b>(i,j);
if((RGB[2]>=170)&&(RGB[1]>=80)&&(RGB[0]<=125))//黄色(255,255,0)在本图片中的黄色定义为(255-170,255-80,0+125)
{
image.at<Vec3b>(i,j)=image.at<Vec3b>(i,j);
}
else
{
image.at<Vec3b>(i,j)=0;//非感兴趣区域变成黑色
}
}
}
Mat srcImage= image; //载入图像到Mat
Mat midImage,dstImage;//临时变量和目标图的定义
//【2】显示原始图
//imshow("【原始图】", srcImage);
//【3】转为灰度图并进行图像平滑
cvtColor(srcImage,midImage, CV_BGR2GRAY);//转化边缘检测后的图为灰度图
GaussianBlur( midImage, midImage, Size(9, 9), 2, 2 );
//【4】进行霍夫圆变换
vector<Vec3f> circles;
HoughCircles( midImage, circles, CV_HOUGH_GRADIENT,1.5, 10, 200, 100, 0, 0 );
//【5】依次在图中绘制出圆
for( size_t i = 0; i < circles.size(); i++ )
{
//参数定义
Point center(cvRound(circles[i][0]), cvRound(circles[i][1]));
int radius = cvRound(circles[i][2]);
//绘制圆心
circle( srcImage, center, 3, Scalar(250,0,0), -1, 8, 0 );
//绘制圆轮廓
circle( srcImage, center, radius, Scalar(250,0,0), 3, 8, 0 );
cout<<"圆心坐标x="<<cvRound(circles[i][0])<<endl<<"圆心坐标y="<<cvRound(circles[i][1])<<endl;
cout<<"半径="<< cvRound(circles[i][2])<<endl;
}
//【6】显示效果图
imshow("【效果图】", srcImage);
waitKey(0);
}
#include<opencv2/highgui/highgui.hpp>
#include<opencv/cv.h>
#include<iostream>
#include<stdio.h>
using namespace std;
using namespace cv;
//opencv2.4.11 vs2010
int main( )
{
Mat Image=imread("a.jpg"); //载入图像到Mat
namedWindow("乒乓球"); //创建一个名为 "【1】动漫图"的窗口
imshow("乒乓球",Image);
Mat image;
blur(Image,image,Size(10,10));
Vec3b RGB;
for(int i=0;i<image.rows;i++) // 长
{
for(int j=0;j<image.cols;j++) //宽
{
RGB=image.at<Vec3b>(i,j);
if((RGB[2]>=170)&&(RGB[1]>=80)&&(RGB[0]<=125))//黄色(255,255,0)在本图片中的黄色定义为(255-170,255-80,0+125)
{
image.at<Vec3b>(i,j)=image.at<Vec3b>(i,j);
}
else
{
image.at<Vec3b>(i,j)=0;//非感兴趣区域变成黑色
}
}
}
Mat srcImage= image; //载入图像到Mat
Mat midImage,dstImage;//临时变量和目标图的定义
//【2】显示原始图
//imshow("【原始图】", srcImage);
//【3】转为灰度图并进行图像平滑
cvtColor(srcImage,midImage, CV_BGR2GRAY);//转化边缘检测后的图为灰度图
GaussianBlur( midImage, midImage, Size(9, 9), 2, 2 );
//【4】进行霍夫圆变换
vector<Vec3f> circles;
HoughCircles( midImage, circles, CV_HOUGH_GRADIENT,1.5, 10, 200, 100, 0, 0 );
//【5】依次在图中绘制出圆
for( size_t i = 0; i < circles.size(); i++ )
{
//参数定义
Point center(cvRound(circles[i][0]), cvRound(circles[i][1]));
int radius = cvRound(circles[i][2]);
//绘制圆心
circle( srcImage, center, 3, Scalar(250,0,0), -1, 8, 0 );
//绘制圆轮廓
circle( srcImage, center, radius, Scalar(250,0,0), 3, 8, 0 );
cout<<"圆心坐标x="<<cvRound(circles[i][0])<<endl<<"圆心坐标y="<<cvRound(circles[i][1])<<endl;
cout<<"半径="<< cvRound(circles[i][2])<<endl;
}
//【6】显示效果图
imshow("【效果图】", srcImage);
waitKey(0);
}