C++ OpenCV无法使用imwrite写入图像

C++ OpenCV无法使用imwrite写入图像,c++,image-processing,opencv,C++,Image Processing,Opencv,我试图将我创建的Mat格式写入jpeg文件,但得到的只是一个未处理的异常。从文件中可以看出 使用此功能只能保存8位(对于PNG、JPEG 2000和TIFF,则为16位无符号(CV_16U))单通道或3通道(具有“BGR”通道顺序)图像 因此,我使用以下代码创建了一个垫子: Mat watermark(5,5,CV_16U); imwrite("C:\\watermark.jpg",watermark); 但是,我无法将图像写入jpeg。它适用于BMP格式,但不适用于JPG或任何其他格式。

我试图将我创建的Mat格式写入jpeg文件,但得到的只是一个未处理的异常。从文件中可以看出

使用此功能只能保存8位(对于PNG、JPEG 2000和TIFF,则为16位无符号(CV_16U))单通道或3通道(具有“BGR”通道顺序)图像

因此,我使用以下代码创建了一个垫子:

Mat watermark(5,5,CV_16U);  
imwrite("C:\\watermark.jpg",watermark);
但是,我无法将图像写入jpeg。它适用于BMP格式,但不适用于JPG或任何其他格式。有人建议我将其转换为CV_16U或8U,但效果不好,而且我确实拥有对C:\目录的写入权限


我漏了一步吗?或者,是否有其他方法可以使用OpenCV将图像保存到JPG中?

此代码可以正确工作,并使/重写“watermark.JPG”:

#包括
#包括
使用名称空间cv;
int main(){
垫水印(5,5,CV_16U);
imwrite(“C:\\watermark.jpg”,水印);
返回0;
}

我有Win7、Wascana Eclipse(MinGW GCC编译器)、Opencv 2.4.5

如果您使用的是最新的Opencv(v3.0)或更高版本以及windows x64位版本,则Opencv的某些功能在调试模式下无法正常工作。。。你必须在发布模式下运行你的代码,然后一切都会完美地运行

我在opencv3.1和x64位调试模式中发现的问题

  • imwrite(文件名、图像)获取异常(读取访问冲突)
  • detectMultiScale(…)检测大量对象
  • 要解决这些问题,请在发布模式下运行应用程序


    仍在寻找一种在调试模式下解决这些问题的好方法。

    您是否确保对OpenCV的JPEG支持已到位?你可以从中做一个快速读取测试,看看它是否应该在该设置上工作。是的,我可以让我们读取jpeg图像。正是这种书写方式(将imwrite转换成bmp以外的格式)让我很难受。奇怪。当控制台出现故障时,是否在控制台上打印任何错误?我知道您说过您可以访问C:\但是,现在您遇到了一个问题,您可能需要快速测试写入C:\\Temp\\watermark.jpg。除此之外,我还怀疑我不是专家的CV_16U格式。我在写入C:\\Temp和C:\\时都会遇到同样的错误。“MySIFT.exe中0x6eb1ee22处的第一次机会异常:0xC0000005:访问冲突读取位置0x00000000。MySIFT.exe中0x6eb1ee22处的未处理异常:0xC0000005:访问冲突读取位置0x00000000。”这是我得到的异常。在快速搜索中,这看起来非常接近:-但是,那里也没有回答。如果您没有看到任何响应,我建议您准备进行调试构建和调试,以查看是否有任何其他线索。(很抱歉没有提供更多帮助)这不是一个真正的答案,而且这个问题已经有半年了。
    #include <opencv2\core\core.hpp>
    #include <opencv2\highgui\highgui.hpp>
    
    using namespace cv;
    
    int main() {    
        Mat watermark(5,5,CV_16U);
        imwrite("C:\\watermark.jpg",watermark);
        return 0;
    }