颜色圆检测

#include "opencv2/highgui/highgui.hpp"
#include "opencv2/imgproc/imgproc.hpp"
#include <iostream>
#include <string>
#include <vector>
int main() 
{
	cv::Mat srcImage = cv::imread("22.jpg");
	if (!srcImage.data)
		return -1;
	cv::imshow("srcImage", srcImage);
	cv::Mat resultImage = srcImage.clone();
	// 中值滤波
	cv::medianBlur(srcImage, srcImage, 3);
	// 转换成hsv颜色空间
	cv::Mat hsvImage;
	cv::cvtColor(srcImage, hsvImage, cv::COLOR_BGR2HSV);
	cv::imshow("hsvImage", hsvImage);
	// 颜色阈值化处理
	cv::Mat lowTempMat;
	cv::Mat upperTempMat;
	// 低阈值限定
	cv::inRange(hsvImage, cv::Scalar(0, 100, 100), 
		cv::Scalar(10, 255, 255), lowTempMat);
	// 高阈值限定
	cv::inRange(hsvImage, cv::Scalar(160, 100, 100),
	    cv::Scalar(179, 255, 255), upperTempMat);
	cv::imshow("lowTempMat", lowTempMat);
	cv::imshow("upperTempMat", upperTempMat);
	// 颜色阈值限定合并
	cv::Mat redTempMat;
	cv::addWeighted(lowTempMat, 1.0, upperTempMat, 
		1.0, 0.0, redTempMat);
	// 高斯平滑
	cv::GaussianBlur(redTempMat, redTempMat, cv::Size(9, 9), 2, 2);
	// 霍夫变换
	std::vector<cv::Vec3f> circles;
	cv::HoughCircles(redTempMat, circles, CV_HOUGH_GRADIENT,
		1, redTempMat.rows / 8, 100, 20, 0, 0);
	// 颜色圆检测结果判断
	if (circles.size() == 0) 
		return 1;
	for (int i = 0; i < circles.size(); ++i)
	{
		// 绘制检测到颜色圆
		cv::Point center(round(circles[i][0]), round(circles[i][1]));
		int radius = round(circles[i][2]);
		cv::circle(resultImage, center, radius, 
			cv::Scalar(0, 255, 0), 5);
	}
	cv::imshow("resultImage", resultImage);
	cv::waitKey(0);
	return 0;
}



转载:http://blog.csdn.net/zhuwei1988


  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值