Changing the OpenCV image format in Matlab format, debug approval __acrt_first_block == header

I am trying to convert an OpenCV image (like cv :: Mat) into a matlab-style format, as this is what the rest of the program requires. For this, I use the following code:

inline double* ConvertCVImageToMATLABImage(Mat &CvImage)
{
    std::vector<cv::Mat> ColorChannels; // B, G, R channels
    cv::split(CvImage, ColorChannels);

    // remember to tranpose first because MATLAB is col-major!!!
    cv::transpose(ColorChannels[0], ColorChannels[0]);
    cv::transpose(ColorChannels[1], ColorChannels[1]);
    cv::transpose(ColorChannels[2], ColorChannels[2]);

    double *MatlabImage = new double[CvImage.rows*CvImage.cols * 3];

    int CounterCompleteImage = 0;
    int CounterEachColorChannel = 0;

    for (CounterEachColorChannel = 0; CounterEachColorChannel<CvImage.rows*CvImage.cols; ++CounterEachColorChannel, ++CounterCompleteImage)
    {
        MatlabImage[CounterCompleteImage] = static_cast<double>(ColorChannels[2].data[CounterEachColorChannel]);
    }

    for (CounterEachColorChannel = 0; CounterEachColorChannel<CvImage.rows*CvImage.cols; ++CounterEachColorChannel, ++CounterCompleteImage)
    {
        MatlabImage[CounterCompleteImage] = static_cast<double>(ColorChannels[1].data[CounterEachColorChannel]);
    }

    for (CounterEachColorChannel = 0; CounterEachColorChannel<CvImage.rows*CvImage.cols; ++CounterEachColorChannel, ++CounterCompleteImage)
    {
        MatlabImage[CounterCompleteImage] = static_cast<double>(ColorChannels[0].data[CounterEachColorChannel]);
    }

    return MatlabImage;
}

It crashes with a debug statement:

__acrt_first_block == header

in the last line (return MatlabImage). Tracking the source of approval seems to be related to the deployment of vector ColorChannels. I tried several ways to do this, i.e. using .clear, using the swap trick, or freeing every element in the vector, but the statement remains.

If it is built into the main function of a C ++ program, this code works fine, it simply will not be in a special function.

I simplified the main function, which calls the code above minimal:

void main(void)
{
    cv::Mat CvImage = imread("E:\\VOC2012\\VOCdevkit\\VOC2012\\JPEGImages\\2008_000027.jpg", CV_LOAD_IMAGE_COLOR);   // Read the file
    double* Image =  ConvertCVImageToMATLABImage(CvImage);
}

: statement

Visual Studio 2015. , (), , debug_heap.cpp, Line 980.

.

+4
2

opencv "BUILD_WITH_STATIC_CRT" , . , detectMultiScale , , opencv .

+2

, Visual Studio 2015, __acrt_first_block == header.

, std::vector<cv::Mat> ColorChannels; cv::Mat ColorChannels[3];.

, , , , , iedoc, ( ).

#include "opencv2/core/core.hpp"
#include "opencv2/imgproc/imgproc.hpp"
#include "opencv2/highgui/highgui.hpp"

inline double* ConvertCVImageToMATLABImage(cv::Mat &CvImage)
{
    cv::Mat ColorChannels[3]; // B, G, R channels
    cv::split(CvImage, ColorChannels);

    // remember to tranpose first because MATLAB is col-major!!!
    cv::transpose(ColorChannels[0], ColorChannels[0]);
    cv::transpose(ColorChannels[1], ColorChannels[1]);
    cv::transpose(ColorChannels[2], ColorChannels[2]);

    double *MatlabImage = new double[CvImage.rows*CvImage.cols * 3];

    int CounterCompleteImage = 0;
    int CounterEachColorChannel = 0;

    for (CounterEachColorChannel = 0; CounterEachColorChannel<CvImage.rows*CvImage.cols; ++CounterEachColorChannel, ++CounterCompleteImage)
    {
        MatlabImage[CounterCompleteImage] = static_cast<double>(ColorChannels[2].data[CounterEachColorChannel]);
    }

    for (CounterEachColorChannel = 0; CounterEachColorChannel<CvImage.rows*CvImage.cols; ++CounterEachColorChannel, ++CounterCompleteImage)
    {
        MatlabImage[CounterCompleteImage] = static_cast<double>(ColorChannels[1].data[CounterEachColorChannel]);
    }

    for (CounterEachColorChannel = 0; CounterEachColorChannel<CvImage.rows*CvImage.cols; ++CounterEachColorChannel, ++CounterCompleteImage)
    {
        MatlabImage[CounterCompleteImage] = static_cast<double>(ColorChannels[0].data[CounterEachColorChannel]);
    }

    return MatlabImage;
}

#include <iostream>
int main(int,char**)
{
    std::cout << cv::getBuildInformation();
    cv::Mat CvImage = cv::imread("c:\\img\\2008_000027.jpg", CV_LOAD_IMAGE_COLOR);   // Read the file
    double* Image = ConvertCVImageToMATLABImage(CvImage);
    return 0;
}

( https://raw.githubusercontent.com/zukun/rcc/master/shape_sharing/code_release/pascal/VOC2010/JPEGImages/2008_000027.jpg)

enter image description here

:

General configuration for OpenCV 2.4.4 =====================================
  Version control:               unknown

  Platform:
    Host:                        Windows 6.1 x86
    CMake:                       2.8.10.2
    CMake generator:             Visual Studio 11 Win64
    CMake build tool:            C:/PROGRA~2/MICROS~3.0/Common7/IDE/devenv.com
    MSVC:                        1700

  C/C++:
    Built as dynamic libs?:      YES
    C++ Compiler:                C:/Program Files (x86)/Microsoft Visual Studio 11.0/VC/bin/x86_amd64/cl.exe  (ver 17.0.60315.1)
    C++ flags (Release):         /DWIN32 /D_WINDOWS /W4  /GR /EHa  /D _CRT_SECURE_NO_DEPRECATE /D _CRT_NONSTDC_NO_DEPRECATE /D _SCL_SECURE_NO_WARNINGS /Gy /bigobj /Oi  /wd4251 /MD /O2 /Ob2 /D NDEBUG  /Zi
    C++ flags (Debug):           /DWIN32 /D_WINDOWS /W4  /GR /EHa  /D _CRT_SECURE_NO_DEPRECATE /D _CRT_NONSTDC_NO_DEPRECATE /D _SCL_SECURE_NO_WARNINGS /Gy /bigobj /Oi  /wd4251 /D_DEBUG /MDd /Zi /Ob0 /Od /RTC1 
    C Compiler:                  C:/Program Files (x86)/Microsoft Visual Studio 11.0/VC/bin/x86_amd64/cl.exe
    C flags (Release):           /DWIN32 /D_WINDOWS /W3   /D _CRT_SECURE_NO_DEPRECATE /D _CRT_NONSTDC_NO_DEPRECATE /D _SCL_SECURE_NO_WARNINGS /Gy /bigobj /Oi  /MD /O2 /Ob2 /D NDEBUG  /Zi
    C flags (Debug):             /DWIN32 /D_WINDOWS /W3   /D _CRT_SECURE_NO_DEPRECATE /D _CRT_NONSTDC_NO_DEPRECATE /D _SCL_SECURE_NO_WARNINGS /Gy /bigobj /Oi  /D_DEBUG /MDd /Zi /Ob0 /Od /RTC1 
    Linker flags (Release):      /STACK:10000000 /machine:x64   /INCREMENTAL:NO  /debug
    Linker flags (Debug):        /STACK:10000000 /machine:x64   /debug /INCREMENTAL 
    Precompiled headers:         YES

  OpenCV modules:
    To be built:                 core imgproc flann highgui features2d calib3d ml video objdetect contrib nonfree photo legacy gpu python stitching ts videostab
    Disabled:                    world
    Disabled by dependency:      -
    Unavailable:                 androidcamera java ocl

  GUI: 
    QT 4.x:                      NO
    Win32 UI:                    YES
    OpenGL support:              NO

  Media I/O: 
    ZLib:                        build (ver 1.2.7)
    JPEG:                        build (ver 62)
    PNG:                         build (ver 1.5.12)
    TIFF:                        build (ver 42 - 4.0.2)
    JPEG 2000:                   build (ver 1.900.1)
    OpenEXR:                     build (ver 1.7.1)

  Video I/O:
    FFMPEG:                      YES (prebuilt binaries)
      codec:                     YES (ver 53.61.100)
      format:                    YES (ver 53.32.100)
      util:                      YES (ver 51.35.100)
      swscale:                   YES (ver 2.1.100)
      gentoo-style:              YES
    OpenNI:                      NO
    OpenNI PrimeSensor Modules:  NO
    PvAPI:                       NO
    GigEVisionSDK:               NO
    DirectShow:                  YES
    XIMEA:                       NO

  Other third-party libraries:
    Use IPP:                     NO
    Use Eigen:                   NO
    Use TBB:                     NO
    Use OpenMP:                  NO
    Use GCD                      NO
    Use Concurrency              YES
    Use C=:                      NO
    Use Cuda:                    NO
    Use OpenCL:                  NO

  Python:
    Interpreter:                 C:/Python27/python.exe (ver 2.7.3)
    Libraries:                   C:/Python27/libs/python27.lib (ver 2.7.3)
    numpy:                       C:/Python27/lib/site-packages/numpy/core/include (ver 1.7.0)
    packages path:               C:/Python27/Lib/site-packages

  Java:
    ant:                         NO
    JNI:                         NO
    Java tests:                  YES

  Documentation:
    Build Documentation:         NO
    Sphinx:                      NO
    PdfLaTeX compiler:           NO

  Tests and samples:
    Tests:                       YES
    Performance tests:           YES
    C/C++ Examples:              NO

  Install path:                  C:/opencv/opencv244/visual_studio/install

  cvconfig.h is in:              C:/opencv/opencv244/visual_studio
-----------------------------------------------------------------
+2

Source: https://habr.com/ru/post/1613490/


All Articles