プログラムを実行するとエラーが発生します。OpenCVライブラリでの色操作について特に考えています。
Raspberry Piカメラからビデオフィードを取得して分析するプログラムを構築しようとしています。ビデオで最も明るいポイントを見つけて、ビデオフィードの中心からのポイントの距離と角度を計算します。
私が行っているプロジェクトでは、カメラが暗いボックスの中心に向けられており、光の移動点があります。
Raspberry Pi 3でOpenCV 4.0.0とC++、および raspicam ライブラリを使用しています。
this ガイドからポインタを取得していますが、Pythonと静的画像の代わりにC++とビデオフィードを使用しています。
raspicam::RaspiCam_Cv Camera;
cv::Mat image;
cv::Mat gray;
int nCount=100;
int nR, nC; // numRows, numCols
cv::Point imgMid;
Vect toCenter;
// for recording brightest part of img
double minVal, maxVal;
cv::Point minLoc, maxLoc;
Camera.set(cv::CAP_PROP_FORMAT, CV_8UC1);
#ifdef DEBUG
cout << "Opening camera..." << endl;
if (!Camera.open()) {
cerr << "Error opening the camera" << endl;
return -1;
}
cout << "Capturing " << nCount << " frames ...." << endl;
#endif
for (int i=0; i< nCount; i++) {
Camera.grab();
Camera.retrieve(image);
nR = image.rows;
nC = image.cols;
imgMid.x = nC / 2;
imgMid.y = nR / 2;
// convert to grayscale image
cv::cvtColor(image, gray, cv::COLOR_BGR2GRAY);
// find x, y coord of brightest part of img
cv::minMaxLoc(gray, &minVal, &maxVal, &minLoc, &maxLoc);
// calculate vector to the center of the camera
toCenter.first = distBtwn(imgMid.x, maxLoc.x, imgMid.y, maxLoc.y);
toCenter.second = angle(imgMid.x, maxLoc.x, imgMid.y, maxLoc.y);
プログラムがビデオフィードのフレームを取得し、それをグレースケールに変換し、フレームの最も明るい部分を見つけ、最後にいくつかの計算を行って、フレームの中心までの距離と、正のxからのポイントの角度を見つけます。 -軸。
これはエラーです
私は電話のカメラをお詫びしますが、私は別の都市で他の誰かと一緒に働いています。彼らはテスト機器を持っています(私はコーダーです)、これは彼らが私に送ったものです。
色を操作したいが、画像のタイプがCV_8U1である。 CV_8UC3やCV_32Fのような少なくとも3チャンネルの画像である必要があります。別のCV_Typeを試す
Camera.set(cv::CAP_PROP_FORMAT, CV_32F);