2013年12月29日 星期日

[openCV] 偵測像素變化值控制LED亮暗

在影像定義ROI並上貼上開關圖示

  1. cv::Mat lightImg = cv::imread("lightOn.jpg");
  2. cv::Mat lightImg_2 = cv::imread("lightOff.jpg");
  3. cv::Mat lightOnROI,
  4. cv::Mat lightOffROI;
  5. lightOnROI = image(cv::Rect(0,0,lightImg.size().width,lightImg.size().height));
  6. lightOffROI = image(cv::Rect(image.size().width-lightImg.size().width,0,lightImg.size().width,lightImg.size().height));
  7. cv::addWeighted(lightOnROI,1.0,lightImg,1.0,0.,lightOnROI);
  8. cv::addWeighted(lightOffROI,1.0,lightImg_2,1.0,0.,lightOffROI);



掃左上角4x4 pixels(可擴充),看看每個值是不是有變化到某個程度  lightThreshold

  1. for(int y=0;y<2;y++)
  2. {
  3. for(int x=0;x<2;x++)
  4. {
  5. /cout<<y<<","<<x<<","<<z<<endl;
  6. if(abs(nowValue[z]-tempValue[z])>lightThreshold)   //light 門檻
  7. {
  8. //cout<<"LightOn"<<endl;
  9. tempValue[z] = nowValue[z];
  10. lightState = 1;
  11. }
  12. int redValue = image.at<cv::Vec3b>(y,x)[0];
  13. int greenValue = image.at<cv::Vec3b>(y,x)[1];
  14. int blueValue = image.at<cv::Vec3b>(y,x)[2];
  15. nowValue[z++] = redValue + greenValue + blueValue;
  16. //cout<<"tempValue:"<<tempValue[z]<<","<<"nowValue:"<<nowValue[z]<<endl;
  17. if(z>3)
  18. {
  19. z=0;
  20. }
  21. }
  22. }



觸碰左右圖示即改變像素值,控制LED亮暗





























arduino端接收

  • if(Serial.available()>0)
  • lightState = Serial.read();



程式碼


  •  https://drive.google.com/file/d/0B3iLa8F71LQwemVPNm1LUE96SW8/edit?usp=sharing





沒有留言:

張貼留言