opencv 识别RGB颜色代码(转)

//检测RGB区域代码
#include "cv.h"
#include "highgui.h"
#include <math.h>
#include <string.h>
#include <iostream>

IplImage* img =NULL;
IplImage* img0 =NULL;
IplImage* pic = NULL;
CvMemStorage* storage =NULL;
const char * wndname = "RGB检测  Demo";
char* names[] = { "pic16.png", "pic10.png","pic11.png","pic13.png","pic15.png",0};

void findRGB(IplImage *img,IplImage *pic)

for(int x=0;x<img->height;x++)
 {
 for(int y=0;y<img->width;y++)
 {

  if( ((uchar*)(img->imageData+x*img->widthStep))[y*img->nChannels+0]<30  //b
   &&((uchar*)(img->imageData + x*img->widthStep))[y*img->nChannels + 1]<30  //g
   &&((uchar*)(img->imageData + x*img->widthStep))[y*img->nChannels + 2]>150)  //r
   CV_IMAGE_ELEM(pic,uchar,x,y)=255;

  if (((uchar*)(img->imageData+x*img->widthStep))[y*img->nChannels+0]<30  //b
   &&((uchar*)(img->imageData + x*img->widthStep))[y*img->nChannels + 1]>150  //g
   &&((uchar*)(img->imageData + x*img->widthStep))[y*img->nChannels + 2]<30) //r
   CV_IMAGE_ELEM(pic,uchar,x,y)=255;

  if (((uchar*)(img->imageData+x*img->widthStep))[y*img->nChannels+0]>150  //b
   &&((uchar*)(img->imageData + x*img->widthStep))[y*img->nChannels + 1]<30  //g
   &&((uchar*)(img->imageData + x*img->widthStep))[y*img->nChannels + 2]<30) //r
   CV_IMAGE_ELEM(pic,uchar,x,y)=255; 
 }
}
}

//cvFindContours( pic, storage, &contour, sizeof(CvContour),
      //CV_RETR_EXTERNAL, CV_CHAIN_APPROX_SIMPLE);
//cvDrawContours(pic, contour,
     // CV_RGB(180,0,0), CV_RGB(0, 0, 0),
     // 2, 2, 8);

 

int main(int argc, char** argv)
{
 int i, c;
 for( i = 0; names[i] != 0; i++ )
 {
  img0 = cvLoadImage( names[i], 1 );
  if( !img0 )
  {
   cout<<"不能载入"<<names[i]<<"继续下一张图片"<<endl;
   continue;
  }
  img = cvCloneImage( img0 );

  
  IplImage* pic=cvCreateImage( cvSize(img->width,img->height),8,1 );
  cvNamedWindow( wndname, 1 );
  cvShowImage(wndname,img);

  findRGB(img,pic);
  cvNamedWindow("findRGB",1);
  cvShowImage("findRGB",pic);
    
  c = cvWaitKey(0);

  cvReleaseImage( &img );
  cvReleaseImage( &img0 );
  cvReleaseImage(&pic);
  
  if( (char)c == 27 )
   break;
 }

 cvDestroyWindow( "wndname" );
 cvDestroyWindow("findRGB");
 return 0;
 
}

  • 0
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值