gpt4 book ai didi

c++ - 将图像转换为灰度时在 OpenCV 中出现异常

转载 作者:行者123 更新时间:2023-11-27 23:59:45 25 4
gpt4 key购买 nike

有奇怪的错误。
我尝试将图像转换为灰度,然后将结果矩阵打印到文件,但出现异常:

"Unhandled exception at 0x00007FF965E31F28 in ConsoleApplication1.exe: Microsoft C++ exception: cv::Exception at memory location 0x00000041305AF2A0.

下面是下面的代码。
当我犯错时有人可以告诉我吗?

int main()
{
freopen("input.txt", "r", stdin);
freopen("output.txt", "w", stdout);
string fname;
cin >> fname;

cv::Mat img = readImage(fname);

cv::Mat grayImg(img.size(), CV_64FC1);
if (img.channels() == 3)
{
cvtColor(img, grayImg, CV_BGR2GRAY);
}
else
{
img.copyTo(grayImg);
}
printImg(grayImg);

cv::waitKey();
return 0;
}
void printImg(cv::Mat &img)
{
cout << "---------//------\n";
if (img.empty())
{
cout << "Empty Image\n";
return;
}

for (int i = 0; i < img.size().height; i++)
{
for (int j = 0; j < img.size().width; j++)
{
cout << img.at<double>(i, j) << " ";
}
cout << endl;
}
cout << "---------//------\n";
}

字符串错误

cout << img.at<double>(i, j) << " ";

最佳答案

如果发生某些事情,OpenCV 函数会抛出异常。如果您将代码放在 try-catch block 中,您可以看到它们:

int main() try
{
// your code here
}
catch(const std::exception& e)
{
std::cout << e.what() << std::endl;
}

当不好的事情发生时 - 只需查看终端输出,您就会明白原因。

更新:收到错误消息后 - 很容易解决它。您期望有 64 位 double 值,但您的灰度垫是 8 位无符号字符

我认为您的代码中的这些更改应该有帮助:

cv::Mat grayImg;
if (img.channels() == 3)
cvtColor(img, grayImg, CV_BGR2GRAY);
else if (img.channels() == 4)
cvtColor(img, grayImg, CV_BGRA2GRAY);
else grayImg = img;
// here grayImg is 8-bit unsigned char
// change it to doubles:
cv::Mat gray64bit;
grayImg.convertTo(gray64bit, CV_64FC1);
printImg(gray64bit);

关于c++ - 将图像转换为灰度时在 OpenCV 中出现异常,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/40059257/

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