gpt4 book ai didi

c++ - 调用 aruco::detectMarkers crash 时 Opencv 停止

转载 作者:行者123 更新时间:2023-12-02 17:20:16 27 4
gpt4 key购买 nike

我正在尝试跟踪我的 aruco 标记,但是当我调用 detectMarkers() 函数时,我的应用程序停止了,我完全不知道为什么。
所以我这样使用它:

aruco::detectMarkers(colorMat, markerDictionnary, markerCorners, markerIds);
变量是这样声明的:
vector<vector<Point2f>> markerCorners;
Ptr<aruco::Dictionary> markerDictionnary = aruco::getPredefinedDictionary(aruco::PREDEFINED_DICTIONARY_NAME::DICT_4X4_50);
vector<int> markerIds;
我的 colorMat在之前的函数中声明和填充,所以我将复制使用它的每一行:
cv::Mat colorMat;
colorMat = Mat(colorHeight, colorWidth, CV_8UC4, &colorBuffer[0]).clone();
cv::flip(colorMat, colorMat, 1);
cv::imshow("Color", colorMat);
我在控制台中遇到的错误是:
OpenCV(4.3.0) Error: Assertion failed (_in.type() == CV_8UC1 || _in.type() == CV_8UC3) in cv::aruco::_convertToGrey, file C:\Users\...\Librairies\opencv_contrib-4.3.0\modules\aruco\src\aruco.cpp, line 107
OpenCV(4.3.0) C:\Users\...\Librairies\opencv_contrib-4.3.0\modules\aruco\src\aruco.cpp:107: error: (-215:Assertion failed) _in.type() == CV_8UC1 || _in.type() == CV_8UC3 in function 'cv::aruco::_convertToGrey'
有谁知道这个错误来自哪里?预先感谢!

最佳答案

如您所见:

colorMat = Mat(colorHeight, colorWidth, CV_8UC4, &colorBuffer[0]).clone();
您正在创建一个具有 4 个 channel 的 cv::Mat,即蓝色、红色、绿色和 alpha channel ;所以你的垫子拿着一个 BGRA 图像。
就像您在错误中看到的那样,detectMarkers 需要 BGR(或 RGB)图像(3 个 channel )或灰度图像(1 个 channel )。
因此,您应该在将图像传递给detectMarker 之前对其进行转换。一种方法是,例如:
 cvtColor(colorMat, colorMat, COLOR_BGRA2GRAY);
将您的图像转换为灰度图片。

关于c++ - 调用 aruco::detectMarkers crash 时 Opencv 停止,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/62592611/

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