//---------------------------------【头文件、命名空间包含部分】----------------------------
// 描述:包含程序所使用的头文件和命名空间
//------------------------------------------------------------------------------------------------
#include <opencv2/opencv.hpp>
#include <opencv2/imgproc/imgproc.hpp>
using namespace cv;
using namespace std;
int main()
{
//载入图像并显示
Mat srcImage = imread("1.jpg", 1);
Mat dstImage;
cvtColor(srcImage, dstImage, CV_RGB2GRAY);
imshow("灰度化效果图", dstImage);
Mat dstGaussian;
GaussianBlur(dstImage, dstGaussian, Size(5, 5), 0, 0);
imshow("Gaussian效果图", dstGaussian);
//【4】进行霍夫圆变换
vector<Vec3f> circles;
HoughCircles(dstGaussian, circles, HOUGH_GRADIENT, 1.5, 10, 100, 100, 0, 0);
Mat rgb;// , hsv;
rgb = srcImage;
for (size_t i = 0; i < circles.size(); i++)
{
string str_t="o";
//参数定义
Point center(cvRound(circles[i][0]), cvRound(circles[i][1]));
int radius = cvRound(circles[i][2]);
//绘制圆心
//circle(srcImage, center, 3, Scalar(0, 255, 0), -1, 8, 0);
//绘制圆轮廓
//circle(srcImage, center, radius, Scalar(155, 50, 255), 3, 8, 0);
printf("第%d,坐标(%d,%d)像素的R:%d,G:%d,B:%d\n", i,center.x,center.y, srcImage.at<Vec3b>(center)[2], srcImage.at<Vec3b>(center)[1], srcImage.at<Vec3b>(center)[0]);
putText(srcImage, std::to_string(i), center, cv::FONT_HERSHEY_SIMPLEX, 0.45, CV_RGB(255, 230, 0), 1.8);
//putText(srcImage, str_t, center, cv::FONT_HERSHEY_SIMPLEX, 0.45, CV_RGB(255, 230, 0), 1.8);
double r_t, g_t, b_t;
r_t =(double)srcImage.at<Vec3b>(center)[2];
g_t = (double)srcImage.at<Vec3b>(center)[1];
b_t = (double)srcImage.at<Vec3b>(center)[0];
double r_d, g_d, b_d;
if ((r_t + g_t + b_t)>0)
{
r_d = r_t / (r_t + g_t + b_t);
g_d = g_t / (r_t + g_t + b_t);
b_d = b_t / (r_t + g_t + b_t);
printf("%lf\n",r_d);
printf("%lf\n", g_d);
printf("%lf\n", b_d);
if ((r_d >= 0.4) && (g_d <= 0.3) && (b_d <= 0.1))
{
str_t = "r";
printf("红色\n");
}
else if ((b_d >= 0.4) && (g_d <= 0.3) && (r_d <= 0.1))
{
str_t = "蓝色";
printf("蓝色\n");
}
else if ((g_d >= 0.4) && (r_d <= 0.2))
{
str_t = "绿色";
printf("绿色\n");
}
else
{
str_t = "其他";
printf("其他\n");
}
}
else
{
printf("其他\n");
}
}
//【6】显示效果图
imshow("【效果图】", srcImage);
waitKey(0);
return 0;
}