gpt4 book ai didi

c++ - 为什么 imwrite on BMP 图像卡住/不返回?

转载 作者:行者123 更新时间:2023-12-02 17:02:15 24 4
gpt4 key购买 nike

我正在从磁盘读取位图文件,并在进行一些操作后将拷贝写回磁盘,同时也写入原始文件的拷贝。位图相对较小,分辨率为 31 x 31像素。

我看到的是,当我的分辨率为 30 x 30像素然后 cv::imwrite正确地写出文件,但是如果我选择 31 x 31 的分辨率像素然后 cv:imwrite只是卡住了,不回来了。这发生在相同的目录上。

<...>
image = cv::imread(imageName, IMREAD_GRAYSCALE); // Read the file
if( image.empty() ) // Check for invalid input
{
cout << "Could not open or find the image" << std::endl ;
return -1;
}
Mat image_flip (width,height,CV_8U);

int8_t pixel_8b;
for (int i=0; i< width; i++){
for (int j=0; j < height; j++){
pixel_8b= image.at<int8_t>(i,j);
image_flip.at<int8_t>(width-i,j) = pixel_8b;
}
}
cout << "Writing files" << endl;
result=cv::imwrite("./output_flip.bmp", image_flip);

cout << result << endl;
return 0;

在好的情况下,我得到文件 output_flip.bmp写入磁盘和 result被陈列。在被卡住的糟糕情况下,我看到的最后一件事是“写入文件”,然后就什么也没有了。只需调整输入图像的大小,我就可以在好情况和坏情况之间来回切换。

任何想法如何解决这个问题?

最佳答案

正如评论中已经讨论的那样,您没有提供 minimal, reproducible example (MRE)。因此,我从您的代码中派生了以下 MRE,因为我想指出几件事(并且想知道您的代码是如何工作的):

#include <opencv.hpp>

int main()
{
cv::Mat image = cv::imread("path/to/your/image.png", cv::IMREAD_GRAYSCALE);

// cv::resize(image, image, cv::Size(30, 30));

cv::Mat image_flip(image.size().height, image.size().width, CV_8U);

for (int i = 0; i < image.size().width; i++)
{
for (int j = 0; j < image.size().height; j++)
{
const uint8_t pixel_8b = image.at<uint8_t>(j, i);
image_flip.at<uint8_t>(j, image.size().width - 1 - i) = pixel_8b;
}
}

std::cout << "Writing files" << std::endl;
const bool result = cv::imwrite("./output_flip.bmp", image_flip);

std::cout << result << std::endl;

return 0;
}
  • 对于单 channel 8 位图像 ( CV_8U ),使用 uint8_t访问单个像素时。
  • 使用 .at 时,请注意,语法是 .at(y, x) .对于方形图像,它可能是相等的,但一般来说,它是错误的常见来源。
  • 访问 .at(j, width-i) i = 0 必须失败, 如果 width = image.size().width , 自 image 的最后一个索引是 width - 1 .

  • 更正这些问题后,我可以毫无问题地运行您的代码以获得更大的图像,以及将图像大小调整为 30 x 30。或 31 x 31 .因此,请看一下,如果您可以通过相应地修改代码来解决您的问题。

    (我知道,我的回答中根本没有解决问题中所述的实际问题(挂 imwrite),但正如我所说,我什至无法运行提供的代码。 .)

    希望有帮助!

    关于c++ - 为什么 imwrite on BMP 图像卡住/不返回?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/60205120/

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