您当前的位置: 首页 > 

惊鸿一博

暂无认证

  • 1浏览

    0关注

    535博文

    0收益

  • 0浏览

    0点赞

    0打赏

    0留言

私信
关注
热门博文

Debug_is_block_type_valid(header->_block_use)

惊鸿一博 发布时间:2017-03-22 23:23:40 ,浏览量:1


Debug Assertion Failed OpenCv is_block_type_valid(header->_block_use)
Ask Question
up vote 2 down vote favorite

I am new to Programming using Visual Studio and openCv. I wrote a simple program to display the red channel of an image, but every time i run the code it throws "DEBUG ASSERTION FAILED" error.

#include 
#include 

#include 

using namespace std;
using namespace cv;

int main() {
    Mat image;
    image = imread("C:/Users/siddartha/Pictures/sample.jpg");
    if (!image.data) {
        cout = 3) {
            vector rgb;
            split(image, rgb);
            namedWindow("r");
            imshow("r", rgb[0]);

        }
    }
    while (1);
    return 0;
}

Error:

Debug Assertion Failed!

Program: ...sual Studio 2015\Projects\sampleOpenCV\Debug\sampleOpenCV.exe
File: minkernel\crts\ucrt\src\appcrt\heap\debug_heap.cpp
Line: 892

Expression: is_block_type_valid(header->_block_use)

Error Window

share | improve this question
 
 
2 Answers 2
active oldest votes
up vote 4 down vote accepted

Are you absolutely sure that the image has been loaded correctly?

I would think that it hasn't been loaded correctly and because of that the vectorrgb is empty and, in turn, the element rgb[0] doesn't exist which triggers the exception ...

A couple of things I noted:

  1. Use slashes (/) for include-statements not backslashes (\), i.e.

    #include  // Bad!
    #include  // Good!
    
  2. In your check

    if (!image.data) { ... } 
    

    do not assume that image.data is set to NULL ornullptr for empty images. Instead check

    if (!image.empty()) { ... }
    
  3. Make sure that calls to cv::imshow(...) are followed by a call tocv::waitKey( /* delay in ms or 0 to wait for user input */ ), cf. the note in theOpenCV reference.

  4. while (1); -- is that intentional? What you want is probably cv::waitKey( 0 ) (see 3.).

UPDATE:

  1. Make sure the vector rgb has been initialized to the number of channels, i.e.

    vector rgb(image.channels());
    split(image, rgb);
    // ...
    

UPDATE 2:

Can you tell me what exactly the error meant ?

Three things:

  1. The default constructor of std::vector creates an empty vector.
  2. Apparently, cv::split() expects the caller, i.e. you, to allocate data for the output. If you fail to do so, it's likely provoke asegmentation fault.
  3. For debug builds some compilers add padding or safety memory around objects in memory which is never to be touched. If this padding memory is altered at runtime, the program "knows" that something bad happened and throws an exception like the one you saw.
share | improve this answer
 
 
I did all the corrections you stated. but now it shows DEBUG Assertion Failure when i press a key in the end to exit. –  sidd607 Jan 14 '16 at 13:30
 
Updated my answer. –  nils Jan 14 '16 at 14:01
 
updating the rgb worked for me. Can you tell me what exactly the error meant ? –  sidd607 Jan 14 '16 at 15:09
 
Updated my answer again. –  nils Jan 15 '16 at 9:05
up vote 0 down vote

it is compiling just fine for me. I am on visual-studio-2013.

here you have a case similar to yours, maybe it will help: debug-assertion-failed

share | improve this answer
 
 
thanks dude, how could i forget about it? –  Dominik Jan 13 '16 at 8:35
 
true, it was wrong hypothesis then : ) –  Dominik Jan 13 '16 at 8:54
关注
打赏
1663399408
查看更多评论
立即登录/注册

微信扫码登录

0.0374s