簡體   English   中英

調用堆棧僅顯示第三方庫

[英]Call stack only shows third party libraries

在我的程序崩潰時,Visual Studio為我提供了以下調用堆棧,該調用堆棧沒有對任何Iv編寫的代碼或源代碼中的行號的引用,這是否表明OpenCV庫中存在錯誤?

我以為仍然可以在程序中找到觸發崩潰的源操作/函數,就像通常情況一樣。

    opencv_imgproc243d.dll!cv::RGB2RGB<unsigned char>::operator()(const unsigned char * src=0x00000000, unsigned char * dst=0x0f010050, int n=1920)  Line 208 + 0x6 bytes   C++
>   opencv_imgproc243d.dll!cv::CvtColorLoop_Invoker<cv::RGB2RGB<unsigned char> >::operator()(const cv::Range & range={...})  Line 176 + 0x1d bytes  C++
    opencv_core243d.dll!`anonymous namespace'::ParallelLoopBodyWrapper::operator()(const cv::Range & sr={...})  Line 134 + 0x17 bytes   C++
    opencv_core243d.dll!`anonymous namespace'::ProxyLoopBody::operator()(int i=0)  Line 177 C++
    opencv_core243d.dll!Concurrency::_Parallel_chunk_helper_invoke<int,unsigned int,`anonymous namespace'::ProxyLoopBody,0>::_Invoke(const int & _First=0, unsigned int & _Index=0, const `anonymous-namespace'::ProxyLoopBody & _Func={...})  Line 1445    C++
    opencv_core243d.dll!Concurrency::_Parallel_chunk_helper<int,unsigned int,`anonymous namespace'::ProxyLoopBody,0>::operator()()  Line 1833 + 0x16 bytes  C++
    opencv_core243d.dll!Concurrency::task_handle<Concurrency::_Parallel_chunk_helper<int,unsigned int,`anonymous namespace'::ProxyLoopBody,0> >::operator()()  Line 116 C++
    opencv_core243d.dll!Concurrency::details::_UnrealizedChore::_InvokeBridge<Concurrency::task_handle<Concurrency::_Parallel_chunk_helper<int,unsigned int,`anonymous namespace'::ProxyLoopBody,0> > >(Concurrency::task_handle<Concurrency::_Parallel_chunk_helper<int,unsigned int,`anonymous namespace'::ProxyLoopBody,0> > * _PChore=0x036fb148 {_M_first=0 _M_step=1 _M_function={...} ...})  Line 3495   C++
    msvcr100d.dll!Concurrency::details::_UnrealizedChore::_StructuredChoreWrapper(Concurrency::details::_UnrealizedChore * pChore=0x036fb148 {_M_first=0 _M_step=1 _M_function={...} ...})  Line 99 + 0xc bytes C++
    msvcr100d.dll!Concurrency::details::_UnrealizedChore::_Invoke()  Line 3454 + 0xc bytes  C++
    msvcr100d.dll!Concurrency::details::WorkItem::Invoke()  Line 75 C++
    msvcr100d.dll!Concurrency::details::InternalContextBase::ExecuteChoreInline(Concurrency::details::WorkItem * pWork=0x0fb8f7dc)  Line 1385   C++
    msvcr100d.dll!Concurrency::details::InternalContextBase::Dispatch(Concurrency::DispatchState * pDispatchState=0x0fb8f7fc)  Line 1478    C++
    msvcr100d.dll!Concurrency::details::FreeThreadProxy::Dispatch()  Line 157   C++
    msvcr100d.dll!Concurrency::details::ThreadProxy::ThreadProxyMain(void * lpParameter=0x029c2160)  Line 162   C++
    kernel32.dll!@BaseThreadInitThunk@12()  + 0x12 bytes    
    ntdll.dll!___RtlUserThreadStart@8()  + 0x27 bytes   
    ntdll.dll!__RtlUserThreadStart@8()  + 0x1b bytes    

斷言似乎是由於函數收到損壞的Mat導致的,失敗了,因為崩潰時該Mat輸出到了控制台。 在此處輸入圖片說明

我會猜測,當在您的代碼中調用cvtColor()方法時,opencv會在自己的線程中運行它。

您可以在此處看到opencv源,該源顯示在Color.cpp文件中調用了此方法。

RGB2RGB格式類似於從一種顏色空間轉換為另一種顏色空間時使用的格式,我想這也許正在創建副本。

因此,我可能會在您的代碼中查找以下命令作為原因。

cvtColor(src, dst, CV_RGB2RGB);
or 
Mat A = Mat(...);
Mat B = A.clone();

I don't think this will cause it as this just copies header information.
Mat B(A);

or

A.copyTo(B);

您可以排除將Mats轉換為BGR或GREY的位置。 實際上,據我所知,opencv在BGR色彩空間中工作,您很可能已經在某處將Mat轉換為RGB,這可能是從中進行搜索的一個很好的起點。

編輯

該斷言還建議您嘗試將一個空Mat克隆到另一個。

Asset(   y==0   )

如果這只是偶爾發生,那么我會尋找if()語句,或者出現克隆或轉換的條件情況。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM