我尝试使用cv :: distanceTransform()函数,但在运行时遇到以下错误:
OpenCV错误:不支持的格式或格式组合(来源 图像必须为8uC1,距离图必须为32fC1(或8uC1以防万一 简单的L1距离变换))在cvDistTransform中,
然而,似乎我的输入mat确实是CV_8U(其类型= 16,深度= 0,通道= 3)。我的输出mat声明为CV_32FC1。违规代码:
//...Apply laplacian
//Convert to CV_8U
cv::convertScaleAbs(image_laplacian, image_laplacian);
//Distance transform
cv::Mat edge_distance(image_laplacian.rows, image_laplacian.cols, CV_32FC1);
cv::distanceTransform(image_laplacian, edge_distance, CV_DIST_L2, 5);
感谢您的帮助!
答案 0 :(得分:1)
如果有人好奇的话。确保您的图像是单通道的。我假设CV_8U可以投射到CV_8UC1用于灰度图像,但事实并非如此
您可以使用public boolean hasNulls() {
return this.bundle == null || bundle.hasNulls();
}
//in bundle
public boolean hasNulls() {
return this.category == null || category.hasNulls();
}
来减少频道数量。