OpenCV中文网站

 找回密码
 立即注册
搜索
热搜: 安装 配置
查看: 6933|回复: 8

如何实现正确率比较高的颜色识别

[复制链接]
发表于 2016-5-15 22:08:51 | 显示全部楼层 |阅读模式
最近弄一个还原魔方的机器,但是颜色识别不太理想,主要是灯光影响太大,识别率并不高,也就60%-%70,波动比较大。我用的就是转换成hsv进行卡值,就是大概在哪个范围属于哪个颜色的这种处理方法。有没有更加智能一些的方法,求指教。能不能用一些机器学习的算法,来进行动态的学习。这一块不是很懂,如果这方面可行的话,打算去学一下机器学习。
回复

使用道具 举报

发表于 2016-5-15 22:39:50 | 显示全部楼层
本帖最后由 smallyouyou 于 2016-5-15 22:46 编辑

用類神經做看看,
這邊有基本的用法,
我還沒用過opencv這塊,
可能要研究一下,
只能先找了這個網址給你參考用法,
http://blog.csdn.net/xiaowei_cqu/article/details/9027617
然後下面是貝氏分類器的例子也可以做看看,
  1. #include "opencv2/opencv.hpp"
  2. #include "iostream"


  3. using namespace cv;
  4. using namespace std;

  5. double inputArr[10][13] =
  6. {
  7.   1,0.708333,1,1,-0.320755,-0.105023,-1,1,-0.419847,-1,-0.225806,0,1,
  8.   -1,0.583333,-1,0.333333,-0.603774,1,-1,1,0.358779,-1,-0.483871,0,-1,
  9.   1,0.166667,1,-0.333333,-0.433962,-0.383562,-1,-1,0.0687023,-1,-0.903226,-1,-1,
  10.   -1,0.458333,1,1,-0.358491,-0.374429,-1,-1,-0.480916,1,-0.935484,0,-0.333333,
  11.   -1,0.875,-1,-0.333333,-0.509434,-0.347032,-1,1,-0.236641,1,-0.935484,-1,-0.333333,
  12.   -1,0.5,1,1,-0.509434,-0.767123,-1,-1,0.0534351,-1,-0.870968,-1,-1,
  13.   1,0.125,1,0.333333,-0.320755,-0.406393,1,1,0.0839695,1,-0.806452,0,-0.333333,
  14.   1,0.25,1,1,-0.698113,-0.484018,-1,1,0.0839695,1,-0.612903,0,-0.333333,
  15.   1,0.291667,1,1,-0.132075,-0.237443,-1,1,0.51145,-1,-0.612903,0,0.333333,
  16.   1,0.416667,-1,1,0.0566038,0.283105,-1,1,0.267176,-1,0.290323,0,1
  17. };

  18. //一个测试样本的特征向量
  19. double testArr[11][12]=
  20. {
  21.   0.125,1,0.333333,-0.320755,-0.406393,1,1,0.0839695,1,-0.806452,0,-0.333333,
  22.   0.708333,1,1,-0.320755,-0.105023,-1,1,-0.419847,-1,-0.225806,0,1,
  23.   0.583333,-1,0.333333,-0.603774,1,-1,1,0.358779,-1,-0.483871,0,-1,
  24.   0.166667,1,-0.333333,-0.433962,-0.383562,-1,-1,0.0687023,-1,-0.903226,-1,-1,
  25.   0.458333,1,1,-0.358491,-0.374429,-1,-1,-0.480916,1,-0.935484,0,-0.333333,
  26.   0.875,-1,-0.333333,-0.509434,-0.347032,-1,1,-0.236641,1,-0.935484,-1,-0.333333,
  27.   0.5,1,1,-0.509434,-0.767123,-1,-1,0.0534351,-1,-0.870968,-1,-1,
  28.   0.125,1,0.333333,-0.320755,-0.406393,1,1,0.0839695,1,-0.806452,0,-0.333333,
  29.   0.25,1,1,-0.698113,-0.484018,-1,1,0.0839695,1,-0.612903,0,-0.333333,
  30.   0.291667,1,1,-0.132075,-0.237443,-1,1,0.51145,-1,-0.612903,0,0.333333,
  31.   0.416667,-1,1,0.0566038,0.283105,-1,1,0.267176,-1,0.290323,0,1
  32. };


  33. int main()
  34. {
  35.   Mat trainData(10, 12, CV_32FC1);//构建训练样本的特征向量
  36.   for (int i=0; i<10; i++)
  37.   {
  38.     for (int j=0; j<12; j++)
  39.     {
  40.       trainData.at<float>(i, j) = inputArr[i][j+1];
  41.     }
  42.   }

  43.   Mat trainResponse(10, 1, CV_32FC1);//构建训练样本的类别标签
  44.   for (int i=0; i<10; i++)
  45.   {
  46.     trainResponse.at<float>(i, 0) = inputArr[i][0];
  47.   }

  48.   CvNormalBayesClassifier nbc;
  49.   bool trainFlag = nbc.train(trainData, trainResponse);//进行贝叶斯分类器训练
  50.   if (trainFlag)
  51.   {
  52.     cout<<"train over..."<<endl;
  53.     nbc.save("d:/normalBayes.txt");
  54.   }
  55.   else
  56.   {
  57.     cout<<"train error..."<<endl;
  58.     system("pause");
  59.     exit(-1);
  60.   }


  61.   CvNormalBayesClassifier testNbc;
  62.   testNbc.load("d:/normalBayes.txt");

  63.   Mat testSample(1, 12, CV_32FC1);//构建测试样本
  64.   for (int i=0; i<11; i++)
  65.   {
  66.     for (int j=0; j<12; j++)
  67.     {
  68.       testSample.at<float>(0, j) = testArr[i][j];
  69.     }
  70.     float flag = testNbc.predict(testSample);//进行测试
  71.     cout<<"flag = "<<flag<<endl;
  72.   }



  73.   system("pause");
  74.   return 0;
  75. }
复制代码



回复 支持 反对

使用道具 举报

 楼主| 发表于 2016-5-15 22:44:49 | 显示全部楼层
smallyouyou 发表于 2016-5-15 22:39
用類神經做看看,
這邊有基本的用法,
我還沒用過opencv這塊,

谢谢提供信息,我看看。
回复 支持 反对

使用道具 举报

发表于 2016-5-15 23:36:02 | 显示全部楼层
hsv好像还YCrCb的区分度好
回复 支持 反对

使用道具 举报

 楼主| 发表于 2016-6-12 09:51:38 | 显示全部楼层
最后用了svm效果相当好。谢谢各位了
回复 支持 反对

使用道具 举报

发表于 2016-7-2 07:51:04 | 显示全部楼层
SVM是什么东东啊楼主
回复 支持 反对

使用道具 举报

发表于 2016-10-20 10:48:19 | 显示全部楼层
xywhnh 发表于 2016-7-2 07:51
SVM是什么东东啊楼主

支持向量机算法,比较经典了
回复 支持 反对

使用道具 举报

发表于 2016-10-27 15:38:07 | 显示全部楼层
请问一下,你说的用SVM识别颜色的具体实现步骤是怎样的啊?我也用HSV实现了颜色的识别,但是效果也是不是很理想
回复 支持 反对

使用道具 举报

发表于 2019-6-3 08:23:42 | 显示全部楼层
请问对于颜色的识别而言有没有什么识别更好的算法呢
回复 支持 反对

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

手机版|OpenCV中文网站

GMT+8, 2024-4-26 08:46 , Processed in 0.009938 second(s), 16 queries .

Powered by Discuz! X3.4

Copyright © 2001-2021, Tencent Cloud.

快速回复 返回顶部 返回列表