基本上我试图将下面的输出图像转换为颜色(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进行处理,并将找到的圆应用于原始彩色图像以进行输出。
原文地址:https://www.jb51.cc/css/218224.html
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。