为什么imread总是报错[ WARN:0@0.165] global loadsave.cpp:248 cv::findDecoder imread_(''): can't open/read file: check file path/integrity
#include <iostream>#include <opencv2/core.hpp>#include <opencv2/highgui.hpp>#include <opencv2/imgproc.hpp>int Otsu(cv::Mat& src, cv::Mat& dst, int thresh) { const int Grayscale = 256; int graynum[Grayscale] = { 0 }; int r = src.rows; int c = src.cols; for (int i = 0; i < r; ++i) { const uchar* ptr = src.ptr<uchar>(i); for (int j = 0; j < c; ++j) { //直方图统计 graynum[ptr[j]]++; } } double P[Grayscale] = { 0 }; double PK[Grayscale] = { 0 }; double MK[Grayscale] = { 0 }; double srcpixnum = r * c, sumtmpPK = 0, sumtmpMK = 0; for (int i = 0; i < Grayscale; ++i) { P[i] = graynum[i] / srcpixnum; //每个灰度级出现的概率 PK[i] = sumtmpPK + P[i]; //概率累计和 sumtmpPK = PK[i]; MK[i] = sumtmpMK + i * P[i]; //灰度级的累加均值 sumtmpMK = MK[i]; } //计算类间方差 double Var = 0; for (int k = 0; k < Grayscale; ++k) { if ((MK[Grayscale - 1] * PK[k] - MK[k]) * (MK[Grayscale - 1] * PK[k] - MK[k]) / (PK[k] * (1 - PK[k])) > Var) { Var = (MK[Grayscale - 1] * PK[k] - MK[k]) * (MK[Grayscale - 1] * PK[k] - MK[k]) / (PK[k] * (1 - PK[k])); thresh = k; } } //阈值处理 src.copyTo(dst); for (int i = 0; i < r; ++i) { uchar* ptr = dst.ptr<uchar>(i); for (int j = 0; j < c; ++j) { if (ptr[j] > thresh) ptr[j] = 255; else ptr[j] = 0; } } return thresh;}int main() { cv::Mat src = cv::imread("F:\\Pan\\Pictures\\Screenshots\\rhino2.tif"); if (src.empty()) { return -1; } if (src.channels() > 1) cv::cvtColor(src, src, CV_8U); cv::Mat dst, dst2; int thresh = 0; double t2 = (double)cv::getTickCount(); thresh = Otsu(src, dst, thresh); //Otsu std::cout << "Mythresh=" << thresh << std::endl; t2 = (double)cv::getTickCount() - t2; double time2 = (t2 * 1000.) / ((double)cv::getTickFrequency()); std::cout << "my_process=" << time2 << " ms. " << std::endl << std::endl; double Otsu = 0; Otsu = cv::threshold(src, dst2, Otsu, 255, cv::THRESH_OTSU + cv::THRESH_BINARY); std::cout << "OpenCVthresh=" << Otsu << std::endl; cv::namedWindow("src", cv::WINDOW_NORMAL); cv::imshow("src", src); cv::namedWindow("dst", cv::WINDOW_NORMAL); cv::imshow("dst", dst); cv::namedWindow("dst2", cv::WINDOW_NORMAL); cv::imshow("dst2", dst2); cv::waitKey(0);}
尝试了各种:放在同一目录调用,单引号调用,更改图片类型(png),都是报错。恳请大佬帮助。
首先,您在代码中使用的 cv::imread
函数报错,提示无法打开或读取文件,这通常是因为以下几个原因:
针对以上问题,您可以尝试以下解决方案:
如果以上方法都不能解决问题,你可以尝试使用其他图像读取函数,如 cv::VideoCapture
来读取视频文件中的帧作为图像。
另外,你的代码中有一段 cv::cvtColor(src, src, CV_8U);
,这段代码将图像转换为灰度图。如果你的原始图像就是灰度图,这行代码可能会改变图像的像素值范围(从0-255变为0-255),这可能不是你想要的结果。如果原始图像是彩色图,这段代码会丢失颜色信息。你需要根据你的需求来决定是否保留这行代码。
这是调用代码,windows平台的. 我绝望地试了无数种路径写法,都没用.它一定返回一个none,也就是empty()为true. [ WARN:0@6.500] global loadsave.cpp:248 cv::findDecoder imread_(''): can't open/read file: check file path/integrity 这是报错消息.从这个报错消息看,它
有人能找出为什么我的不能工作。也许我错过了什么。我意识到这可能是愚蠢的没有任何更多的上下文比我所展示的,但请您询问,我将很乐意提供更多。 这是一段很大的代码,所以我不知道如何用它生成SSCE。您正在查看的是子类的构造函数,它包含3个面板。此时,只是一个。方法打开一个filechooser,然后加载选定的图像,该图像被绘制到上。图像显示良好,一切正常,除了我调整窗口大小时,没有滚动条。
我刚开始学C++,我试着做一个骰子游戏,用户输入一个1到6之间的数字,然后代码打印一个在这个范围内的随机数,如果y和z相同,你就赢了。 这是我的代码,但当我输入一个数组中没有的数字时,它的工作方式就好像它在数组中一样。 (输入是y)(数组是x)(你需要赢的数字是z) 此外,我可能会更改它,使它只读取数组,这样用户甚至可以放入骰子的边数,如果这样做顺利的话。
按下开始按钮后,它运行程序,但它不允许我使用右下角的退出按钮,我不知道为什么它会这样做。有人能帮忙吗。我希望它继续运行该程序,但仍然允许我使用该按钮,因此,如果我想中途退出,它将允许我。项目描述:“对于我的项目,我将使用python创建一个随机迷宫生成软件。我将创建一个网格呈现给用户。该软件将从左上角开始,然后创建迷宫,沿随机方向运行,最后在右下角结束。”
问题内容: 发生了最奇怪的事情,我的测试运行正常,但现在不再,我完全没有更改代码,这里是一个例外: 问题答案: 我看到您正在使用Eclipse,但您是否还在使用其他外部构建/测试工具,例如Ant或Maven?有时,在同时使用其他外部工具时,Eclipse可能会不同步。 如果使用外部工具,请执行清理生成的工件所需的所有操作(例如mvn clean)。然后刷新Eclipse项目并按照前面的建议进行干净