gpt4 book ai didi

c++ - 输入图像中的无效 channel 数

转载 作者:塔克拉玛干 更新时间:2023-11-03 07:02:46 25 4
gpt4 key购买 nike

我在运行我的程序时收到一个错误,我特别想到 OpenCV 库中的颜色操作。

我正在尝试构建一个程序,从 Raspberry Pi 摄像头获取视频源并对其进行分析。我想找到视频中的最亮点,并计算该点距视频源中心的距离和角度。

我正在做的项目是将相机对准暗箱的中心,并有一个移动的光点。

我在 Raspberry Pi 3 以及 raspicam 上使用 OpenCV 4.0.0 和 C++图书馆。

我正在从 this 获取指点指南,但我使用的是 C++ 和视频源,而不是 Python 和静态图像。

    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 轴。

这是错误

我为手机摄像头道歉,但我正在与另一个城市的其他人合作,他们有测试设备(我是编码员),这就是他们发给我的。

最佳答案

如错误消息所述,输入给颜色转换函数的图像的 channel 数无效。

关键是你正在获取帧作为单个 8 位 channel

Camera.set(cv::CAP_PROP_FORMAT, CV_8UC1)

然后您尝试将此帧转换为灰度

cv::cvtColor(image, gray, cv::COLOR_BGR2GRAY)

您有 2 个简单的选择来解决这个问题:

  1. 你改变相机采集格式以获得颜色框架中的信息,例如使用 CV_32S 或 CV_32F
  2. 你跳过颜色转换,因为你已经有了灰度图像,因此不需要转换它。

Take a look to this link for OpenCV color manipulation

关于c++ - 输入图像中的无效 channel 数,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/56488382/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com