【问题标题】:Unable to write images using imwrite in OpenCV无法在 OpenCV 中使用 imwrite 写入图像
【发布时间】:2015-10-29 19:54:11
【问题描述】:

我正在尝试使用 imwrite 写入图像,如下所示:

Mat object = imread ("C:/Users/User/Desktop/book.jpg", CV_LOAD_IMAGE_GRAYSCALE);
//calculate integral image
        Mat iObject;
        integral(object, iObject);
        imshow("Good Matches", iObject);
        imwrite("C:/Users/User/Desktop/IntegralImage.jpg", iObject);
        cvWaitKey(0);

但它没有成功,我读过它,一些解决方案是将jpg更改为bmp。我也试过了,但没有结果!请帮忙

【问题讨论】:

  • 执行 imshow 时是否正确显示?您是否使用“用户”帐户,您是否有权写入“用户”的桌面
  • 是的 imshow 显示正确.. 我怎么知道我是否有权写入?
  • 它是否给出任何错误信息?
  • 不,它不会给出任何错误:(
  • 有什么问题?无法保存图片,还是图片保存了但基本全白?

标签: c++ opencv


【解决方案1】:

无法保存图片

这是因为您没有在该位置写入的权限。解决方案:

  1. 以管理员身份启动您的程序
  2. 更改到您有足够权限的位置

完整图像已保存空白

积分图像的类型为CV_32UC1,因此高于255的值将饱和到255,并保存为白色。您无法从保存的图像中恢复原始值。

解决方案:

  1. 标准化值以适应[0,255] 的范围,并保存CV_8U 图像。您无法从保存的图像中恢复原始值,但至少可以正确缩放和显示。

  2. 使用FileStorage 保存原始数据。您保留原始值。

  3. 如果您需要比FileStorage 更快的速度,您可以保存原始二进制数据。有关示例,请参阅here。您保留原始值。

这是显示解决方案 1 和 2 的示例代码。对于 3,请参阅给定的链接。

#include <opencv2\opencv.hpp>
using namespace cv;

int main()
{
    // Load image
    Mat1b object = imread("path_to_image", IMREAD_GRAYSCALE);

    // Calculate integral image
    Mat1i iObject;
    integral(object, iObject);

    imwrite("save_1i.png", iObject);

    // the saved image has saturated values

    // /////////////////////////////////////////

    // Save using imwrite
    Mat1b save_1b;
    normalize(iObject, save_1b, 255, 0, NORM_MINMAX);
    imwrite("save_1b.png", save_1b);

    // the saved image has scaled values, but displayed correctly


    // /////////////////////////////////////////

    // Save using FileStorage
    {
        FileStorage fs("save_fs.yml", FileStorage::WRITE);
        fs << "integral" << iObject;

        // the saved file has original values
    }


    // Load using FileStorage
    Mat1i loadedIObject;
    {
        FileStorage fs("save_fs.yml", FileStorage::READ);
        fs["integral"] >> loadedIObject;
    }

    // loadedIObject has original values

    return 0;
}

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2018-03-02
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2020-03-17
    • 2016-08-28
    • 2016-08-29
    相关资源
    最近更新 更多