【问题标题】:OpenCV C++ error using cvSaveImage Error:Assertion failed ((flags & FIXED_TYPE) != 0) in cv::_InputArray::typeOpenCV C++ 错误使用 cvSaveImage 错误:断言失败 ((flags & FIXED_TYPE) != 0) in cv::_InputArray::type
【发布时间】:2018-09-10 06:02:37
【问题描述】:

我对 OpenCV 比较陌生。在这种情况下,我在进行一些处理后尝试使用 cvSaveImage 保存图像,但是抛出了这个错误

在 cv::_InputArray::type、文件 C:\build\master_winpack-build-win64-vc14\opencv\modules\core\src\matrix_wrap.cpp 中断言失败 ((flags & FIXED_TYPE) != 0),第 807 行

似乎输入数组的类型有问题,但我不知道为什么?

这是我的代码的样子

int main(int argc, char** argv) {

    IplImage* img = cvLoadImage("HOLES_CAM1_NG.bmp", CV_LOAD_IMAGE_GRAYSCALE);
    IplImage* houghImg = cvCloneImage(img);

/*

    SOME PROCESSING

                      */

    cvSaveImage("HOLES_CAM1_NG_processed.png", houghImg);


    cvReleaseImage(&img);
    cvReleaseImage(&houghImg);
}

【问题讨论】:

  • 您声称使用的是 C++,所以请使用 C++ OpenCV API,而不是古老的、已弃用的 C API。好处之一是不必处理原始指针。

标签: c++ opencv image-processing


【解决方案1】:

您正在使用已弃用的 C API。

请尝试执行以下操作: 参考:https://docs.opencv.org/2.4/doc/tutorials/introduction/load_save_image/load_save_image.html

#include <cv.h>
#include <highgui.h>
#include <opencv2/imgproc/imgproc.hpp>
#include <stdio.h>

using namespace cv;

int main( int argc, char** argv )
{
 Mat img;
 img = imread( "HOLES_CAM1_NG.bmp", CV_LOAD_IMAGE_GRAYSCALE );

 if(!img.data )
 {
   printf( " No image data \n " );
   return -1;
 }
/*

SOME PROCESSING

                  */
 imwrite( "HOLES_CAM1_NG_processed.png", houghImg );

 namedWindow( "Original image", CV_WINDOW_AUTOSIZE );
 namedWindow( "Gray image", CV_WINDOW_AUTOSIZE );

 imshow( "Original image", img );
 imshow( "Hough image", houghImg );

 waitKey(0);

 return 0;
}

【讨论】:

    【解决方案2】:

    如果 cvSaveImage() 不起作用,最好像 cvCopyImage 一样将其删除 :)

    【讨论】:

      猜你喜欢
      • 2015-05-20
      • 2020-08-21
      • 1970-01-01
      • 2022-01-10
      • 1970-01-01
      • 2023-03-23
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多