Android OpenCV错误:断言失败(通道()==CV\u MAT\u CN(数据类型))

Android OpenCV错误:断言失败(通道()==CV\u MAT\u CN(数据类型)),android,opencv,image-processing,Android,Opencv,Image Processing,我花了很多时间试图解决这个问题。这是我的日志文件(Android)中的以下错误 我完全被难住了。Java代码传入从.getNativeObjAddr()调用生成的长值 有人知道这个错误吗?我无法在android中跟踪错误(jni c++)。同样的问题。 除了通道的灰度/颜色数问题外,可能是您没有向函数发送正确的结构,在我的例子中是cv::solvePnP()中的std::vector 我做到了: ... std::vector<cv::KeyPoint> keypoi

我花了很多时间试图解决这个问题。这是我的日志文件(Android)中的以下错误

我完全被难住了。Java代码传入从.getNativeObjAddr()调用生成的长值

有人知道这个错误吗?我无法在android中跟踪错误(jni c++)。

同样的问题。 除了通道的灰度/颜色数问题外,可能是您没有向函数发送正确的结构,在我的例子中是cv::solvePnP()中的std::vector

我做到了:

    ...
    std::vector<cv::KeyPoint> keypoints;
    _blob_detector->detect(image, keypoints);
    cv::solvePnP(_model_points, keypoints, _camera_matrix, _dist_coeffs, _rotation_vector, _translation_vector);
    // error 215 because sending cv::Keypoints vector instead of cv::Point2d vector
    // (same thing if trying to send a cv::Mat as second argument)
。。。
向量关键点;
_斑点检测器->检测(图像、关键点);
cv::solvePnP(模型点、关键点、摄像机矩阵、距离系数、旋转向量、平移向量);
//错误215,因为发送cv::Keypoints向量而不是cv::Point2d向量
//(如果尝试发送cv::Mat作为第二个参数,情况也是如此)
有效的方法是发送cv::Point2d的简单而正确的std::vector:

    ...
    std::vector<cv::KeyPoint> keypoints;
    _blob_detector->detect(image, keypoints);
    // copying to the correct structure
    std::vector<cv::Point2d> image_points;
    for (auto & keypoint : keypoints) image_points.push_back(keypoint.pt);    
    cv::solvePnP(_model_points, image_points, _camera_matrix, _dist_coeffs, _rotation_vector, _translation_vector);
    // no error
。。。
向量关键点;
_斑点检测器->检测(图像、关键点);
//复制到正确的结构
std::矢量图像_点;
对于(自动和关键点:关键点)图像点。向后推(关键点.pt);
cv::solvePnP(模型点、图像点、摄像机矩阵、距离系数、旋转向量、平移向量);
//无误

图像的通道数不匹配,例如,您试图将bgr图像复制到灰度图像(或相反),感谢您的快速响应。我会检查我的代码。或者可能是BGRA(在android中经常使用)图像到BGR或灰度。在图像中生成后显示mat.channels()值。您解决了吗?如果是,你是如何做到的?因为我也有同样的问题。
    ...
    std::vector<cv::KeyPoint> keypoints;
    _blob_detector->detect(image, keypoints);
    // copying to the correct structure
    std::vector<cv::Point2d> image_points;
    for (auto & keypoint : keypoints) image_points.push_back(keypoint.pt);    
    cv::solvePnP(_model_points, image_points, _camera_matrix, _dist_coeffs, _rotation_vector, _translation_vector);
    // no error