将图像颜色从灰度转换为RGB OpenCV C

基本上我试图将下面的输出图像转换为颜色(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进行处理,并将找到的圆应用于原始彩色图像以进行输出

相关文章

Css3如何实现鼠标移上变长特效?(图文+视频)
css3怎么实现鼠标悬停图片时缓慢变大效果?(图文+视频)
jquery如何实现点击网页回到顶部效果?(图文+视频)
css3边框阴影效果怎么做?(图文+视频)
css怎么实现圆角边框和圆形效果?(图文+视频教程)
Css3如何实现旋转移动动画特效