C++ OpenCV imwrite不';不要保存图像

C++ OpenCV imwrite不';不要保存图像,c++,opencv,C++,Opencv,我使用的是Basler相机,我正试图用OpenCV保存抓取的图像。但是,当我尝试使用imwrite()时,出现以下错误: imwrite_uuc('C:/Users/Uporabnik/Desktop/slika.png'):无法写入数据:未知异常 我对抓取图像的转换: openCvImage = Mat(image.GetHeight(), image.GetWidth(), CV_16U, (uint8_t *)image.GetBuffer()); 正在尝试保存图像: cv::imwri

我使用的是Basler相机,我正试图用OpenCV保存抓取的图像。但是,当我尝试使用imwrite()时,出现以下错误:

imwrite_uuc('C:/Users/Uporabnik/Desktop/slika.png'):无法写入数据:未知异常

我对抓取图像的转换:

openCvImage = Mat(image.GetHeight(), image.GetWidth(), CV_16U, (uint8_t *)image.GetBuffer());
正在尝试保存图像:

cv::imwrite("C:/Users/Uporabnik/Desktop/slika.png", openCvImage);

我也在用巴斯勒相机。您还需要共享包含basler配置的代码。以下是我如何使用basler camera以opencv格式获取帧:

#include <pylon/usb/BaslerUsbInstantCamera.h>
#include <opencv2/core/core.hpp>
#include <opencv2/highgui/highgui.hpp>
#include <pylon/PylonIncludes.h>    

using namespace std;
using namespace cv;
using namespace Pylon;
using namespace GenApi;
using namespace Basler_UsbCameraParams;

int main()
{
Mat openCvImage;
Pylon::PylonAutoInitTerm autoInitTerm;
CBaslerUsbInstantCamera camera(CTlFactory::GetInstance().CreateFirstDevice());
CImageFormatConverter formatConverter;
CPylonImage pylonImage;

    camera.MaxNumBuffer = 1;
    formatConverter.OutputPixelFormat= PixelType_BGR8packed;
    camera.StartGrabbing( c_countOfImagesToGrab);
    const uint8_t *pImageBuffer = (uint8_t *) ptrGrabResult->GetBuffer();
    formatConverter.Convert(pylonImage, ptrGrabResult);
    openCvImage= cv::Mat(ptrGrabResult->GetHeight(), ptrGrabResult>GetWidth(), CV_8UC3, (uint8_t *) pylonImage.GetBuffer());

      imshow("Basler Frame",openCvImage);
      waitKey(0);
      return 0;
}
#包括
#包括
#包括
#包括
使用名称空间std;
使用名称空间cv;
使用名称空间挂架;
使用GenApi;
使用名称空间Basler_UsbCameraParams;
int main()
{
Mat-openCvImage;
Pylon::PylonAutoInitTerm autoInitTerm;
CBaslerUsbInstantCamera摄像机(CTlFactory::GetInstance().CreateFirstDevice());
CImageFormatConverter;
CPylonImage-pylonImage;
camera.MaxNumBuffer=1;
formatConverter.OutputPixelFormat=PixelType_BGR8packed;
照相机。开始抓取(图像抓取的c_计数);
const uint8_t*pImageBuffer=(uint8_t*)ptrGrabResult->GetBuffer();
formatConverter.Convert(pylonImage,ptrGrabResult);
openCvImage=cv::Mat(ptrGrabResult->GetHeight(),ptrGrabResult>GetWidth(),cv_8UC3,(uint8_t*)pylonImage.GetBuffer();
imshow(“Basler框架”,openCvImage);
等待键(0);
返回0;
}
但首先,您需要使用“imshow”功能来查看图像。
如果可以,问题在目录部分。否则,您需要共享有关启动basler摄像头的代码。

我也在使用basler摄像头。您还需要共享包含basler配置的代码。以下是我如何使用basler camera以opencv格式获取帧:

#include <pylon/usb/BaslerUsbInstantCamera.h>
#include <opencv2/core/core.hpp>
#include <opencv2/highgui/highgui.hpp>
#include <pylon/PylonIncludes.h>    

using namespace std;
using namespace cv;
using namespace Pylon;
using namespace GenApi;
using namespace Basler_UsbCameraParams;

int main()
{
Mat openCvImage;
Pylon::PylonAutoInitTerm autoInitTerm;
CBaslerUsbInstantCamera camera(CTlFactory::GetInstance().CreateFirstDevice());
CImageFormatConverter formatConverter;
CPylonImage pylonImage;

    camera.MaxNumBuffer = 1;
    formatConverter.OutputPixelFormat= PixelType_BGR8packed;
    camera.StartGrabbing( c_countOfImagesToGrab);
    const uint8_t *pImageBuffer = (uint8_t *) ptrGrabResult->GetBuffer();
    formatConverter.Convert(pylonImage, ptrGrabResult);
    openCvImage= cv::Mat(ptrGrabResult->GetHeight(), ptrGrabResult>GetWidth(), CV_8UC3, (uint8_t *) pylonImage.GetBuffer());

      imshow("Basler Frame",openCvImage);
      waitKey(0);
      return 0;
}
#包括
#包括
#包括
#包括
使用名称空间std;
使用名称空间cv;
使用名称空间挂架;
使用GenApi;
使用名称空间Basler_UsbCameraParams;
int main()
{
Mat-openCvImage;
Pylon::PylonAutoInitTerm autoInitTerm;
CBaslerUsbInstantCamera摄像机(CTlFactory::GetInstance().CreateFirstDevice());
CImageFormatConverter;
CPylonImage-pylonImage;
camera.MaxNumBuffer=1;
formatConverter.OutputPixelFormat=PixelType_BGR8packed;
照相机。开始抓取(图像抓取的c_计数);
const uint8_t*pImageBuffer=(uint8_t*)ptrGrabResult->GetBuffer();
formatConverter.Convert(pylonImage,ptrGrabResult);
openCvImage=cv::Mat(ptrGrabResult->GetHeight(),ptrGrabResult>GetWidth(),cv_8UC3,(uint8_t*)pylonImage.GetBuffer();
imshow(“Basler框架”,openCvImage);
等待键(0);
返回0;
}
但首先,您需要使用“imshow”功能来查看图像。
如果可以,问题在目录部分。否则,您需要共享有关启动basler摄像头的代码。

可能您的转换不正确,请尝试使用CV_8UC1,而不是CV_16U。另外,请确保在使用basler缓冲区时未解除分配。您可以尝试先对其进行
cv::imshow
。您可能还想与Basler camera configuration共享更多代码。但我怀疑您在拍摄图像时使用的Basler PixelFormat不兼容-确保其16位对齐(因此16位或12位未打包)。可能您的转换不正确,请尝试使用CV_8UC1,而不是CV_16U。另外,请确保在使用basler缓冲区时未解除分配。您可以尝试先对其进行
cv::imshow
。您可能还想与Basler camera configuration共享更多代码。但我怀疑您在拍摄图像时使用的是不兼容的Basler像素格式-确保其16位对齐(因此16位或12位未打包)。