【发布时间】:2015-05-15 19:48:58
【问题描述】:
我是 C++ 和 OpenCV 的新手,我目前的项目需要从矩阵转换为灰度图像。
这里我使用了函数 cvtColor,但由于某种原因,它不断崩溃导致错误:“OpenCV 错误:断言失败(scn==3 | scn==4) in cv::cvtColor”。
这是我的源代码:
for (int i = 0; i < 2048; i++)
{
for (int j = 0; j < 2048; j++)
{
t[i][j] = abs((L3[i][j] - L_blurred_3[i][j]) / (sqrt(L2_blurred[i][j] - L_blurred_4[i][j])));
}
}
Mat tt(2048, 2048, CV_64F, Scalar(0));
for (int i = 0; i < 2048; i++)
{
for (int j = 0; j < 2048; j++)
{
tt.at<double>(i, j) = t[i][j];
}
}
tt.convertTo(tt, CV_32F);
Mat tgray(2048, 2048, CV_32F, Scalar(0));
cvtColor(tt, tgray, COLOR_BGR2GRAY);
我确实在网站和谷歌上进行了一些搜索,我尝试了许多不同的方法,但结果仍然相同,我知道问题是我的矩阵“tt”是单通道图像,所以我有 2 个主要问题:
- 如何修复此断言错误?我需要将 tt 转换为 3 或 4 通道吗?如何?
- 还有其他功能可以为 1 通道图像做同样的工作吗?
【问题讨论】:
-
cvtColor(tt, tgray, COLOR_BGR2GRAY);需要一个 3 通道输入,您的 tt 只有一个。为什么要将单通道 Mat 转换为单通道 Mat ?
-
你可能甚至不需要 cvtColor() 操作
-
但是为什么在 matlab 中的 Mat tt 和这个: tgray=mat2gray(tt) deosn 没有给出相同的输出?我的意思是,这两个功能都是将矩阵转换为灰度图像,对吗?因此,如果 tt 已经是灰度的,那么 mat2gray(tt) 的函数是什么?
-
opencv != matlab.盲目的 1:1 代码转换在这里并不是一个好主意。
-
我知道,我只是想知道,谢谢:D