OpenCV imwrite()不保存图像
OpenCV imwrite() not saving image
我正在尝试从我的mac上保存OpenCV的图像,我正在使用以下代码,到目前为止它还没有工作。
cv::imwrite("/Users/nickporter/Desktop/Gray_Image.jpg", cvImage);
有人知道为什么这可能不是保存?
OpenCV在保存到JPG
图像时有问题,尝试保存到BMP
:
cv::imwrite("/Users/nickporter/Desktop/Gray_Image.bmp", cvImage);
同样,在此之前,确保您的映像cvImage
是有效的。您可以通过先显示图像来检查它:
namedWindow("image", WINDOW_AUTOSIZE);
imshow("image", cvImage);
waitKey(30);
我遇到了同样的问题,一个可能的原因是放置图像的目标文件夹。假设您想要复制a.p jpg到文件夹"C:\folder1\folder2\"
,但实际上当folder2
不存在时,复制不能成功(这是我的实际测试,而不是来自官方公告)。我通过检查文件夹是否存在来解决这个问题,如果不存在就创建一个文件夹。这里是一些代码,可能会帮助使用c++ &boost::文件系统。希望能有所帮助。
#include <boost/filesystem.hpp>
#include <iostream>
std::string str_target="C:\folder1\folder2\img.jpg";
boost::filesystem::path path_target(str_target);
boost::filesystem::path path_folder=path_target.parent_path();//extract folder
if(!boost::filesystem::exists(path_folder)) //create folder if it doesn't exist
{
boost::filesystem::create_directory(path_folder);
}
cv::imwrite(str_target,input_img);
我还建议检查文件夹权限。即使输出文件夹没有写权限,Opencv也会悄悄地从imwrite返回。
我刚刚遇到了一个类似的问题,加载一个jpg并试图将其保存为jpg。添加了这段代码,现在看起来很好。
vector<int> compression_params;
compression_params.push_back(CV_IMWRITE_JPEG_QUALITY);
compression_params.push_back(100);
您需要在writefile中包含该参数。
cv::imwrite("/Users/nickporter/Desktop/Gray_Image.jpg", cvImage, compression_params);
OpenCV 3.2 imwrite()似乎有一个问题,写jpg文件与Windows调试模式。我用这种方法来代替imwrite()。
cv::Mat cvImage;
#ifdef DEBUG
IplImage image = IplImage(cvImage);
cvSaveImage("filename.jpg", &image);
#else
cv::imwrite("filename.jpg", cvImage);
#endif
可以在代码中添加以下函数,以支持输出用于调试的jpg图像。
你只需要为它传递一个image
和一个filename
。在函数中,指定希望写入&具有。
void imageWrite(const cv::Mat &image, const std::string filename)
{
// Support for writing JPG
vector<int> compression_params;
compression_params.push_back( CV_IMWRITE_JPEG_QUALITY );
compression_params.push_back( 100 );
// This writes to the specified path
std::string path = "/path/you/provide/" + filename + ".jpg";
cv::imwrite(path, image, compression_params);
}
尽管它不适合您的情况。如果作为参数给cv::imwrite函数的映像路径超过系统允许的最大路径长度(或可能允许的文件名长度),则可能出现此问题。
Linux参见:https://unix.stackexchange.com/questions/32795/what-is-the-maximum-allowed-filename-and-folder-size-with-ecryptfs
windows参见:https://www.quora.com/What-is-the-maximum-character-limit-for-file-names-in-windows-10
- Gstreamer:每 5 秒使用多文件墨水保存图像/jpeg
- OpenCV imwrite不会保存图像
- qpixmap qclipboard和保存图像倒置
- 如何从 GIFLIB 保存图像结构中获取 RGB 颜色数据
- 处理openCV后,保存图像要文件
- Haar检测-保存图像的Mat,以便获得并显示前一帧
- 在opencv中使用imwrite保存图像时,会将图像全部写入黑色,但imshow会正确显示
- CImg保存图像会更改值
- 通过WiFi从Android向Windows发送/保存图像时数据过多
- 使用 libpng - const 对象保存图像
- 无法使用OpenCV保存图像
- 如何在c中使用socket编程保存图像数据
- 通用Windows可以动态地绘制图形和保存图像
- 模糊保存图像检测对象使用OpenCV
- Qt抓取小部件和保存图像
- 如何在英特尔RealSense(Visual c++)中保存图像
- 如何从RGBA格式保存图像的缓冲区中创建opencv中的图像
- 如何使用libcurl保存图像
- 需要一些手来渲染、显示和保存图像
- 如何通过http下载和保存图像