基本上我试图将下面的输出图像转换为颜色(RGB)。此代码当前输出的图像是灰度级,但是,对于我的应用程序,我希望将其输出为颜色。请让我知道我应该转换图像。
下面的代码也是C,它使用openCV的函数。请记住,我正在使用一个包装器在我的iphone应用程序中使用这个代码。
cv::Mat CVCircles::detectedCirclesInImage(cv::Mat img,double dp,double minDist,double param1,double param2,int min_radius,int max_radius) { //(cv::Mat img,int max_radius) if(img.empty()) { cout << "can not open image " << endl; return img; } Mat cimg; medianBlur(img,img,5); cvtColor(img,cimg,CV_GRAY2RGB); vector<Vec3f> circles; HoughCircles( img //InputArray,circles //OutputArray,CV_HOUGH_GRADIENT //int method,1//dp //double dp=1 1 ... 20,minDist //double minDist=10 log 1...1000,100//param1 //double param1=100,30//param2 //double param2=30 10 ... 50,min_radius //int minRadius=1 1 ... 500,max_radius //int maxRadius=30 1 ... 500 ); for( size_t i = 0; i < circles.size(); i++ ) { Vec3i c = circles[i]; circle( cimg,Point(c[0],c[1]),c[2],Scalar(255,0),3,CV_AA); circle( cimg,2,Scalar(0,255,CV_AA); } return cimg; }
解决方法
这是目前设置为期望灰度图像作为输入。我想你在问如何适应它来接受彩色输入图像并返回颜色输出图像。你不需要改变太多:
cv::Mat CVCircles::detectedCirclesInImage(cv::Mat img,double param1,int max_radius) { if(img.empty()) { cout << "can not open image " << endl; return img; } Mat img; if (img.type()==CV_8UC1) { //input image is grayscale cvtColor(img,CV_GRAY2RGB); } else { //input image is colour cimg = img; cvtColor(img,CV_RGB2GRAY); }
其余的一直保持原样。
如果您的输入图像为颜色,则将其转换为灰色,由HoughCircles进行处理,并将找到的圆应用于原始彩色图像以进行输出。