日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

Opencv学习笔记——release和debug两个模式的运行问题

發布時間:2025/3/15 编程问答 25 豆豆
生活随笔 收集整理的這篇文章主要介紹了 Opencv学习笔记——release和debug两个模式的运行问题 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.


版權聲明:本文為博主原創文章,未經博主允許不得轉載。博客不用于商業活動,博主對博客的使用,擁有最終解釋權?
本文為原創作品,未經本人同意,禁止轉載,禁止用于商業用途!本人對博客使用擁有最終解釋權?
歡迎關注我的網上圖書室: 晨鳧追風和 微信公眾號:青春當追風

作者:晨鳧追風

關于Opencv的一個bug的解決方法

錯誤:

Opencv配置完之后運行一切都很正常,也愉快的弄了一些demo,然而突然有一天,我心血來潮想要在release下運行一下自己的代碼,于是出現了一個很美的畫面:

?

?

輸出窗口顯示錯誤信息:

0x50AA8B98(opencv_highgui249d.dll) (template_example.exe)處的第一機會異常:?0xC0000005:?讀取位置 0xACC6BCCD時發生訪問沖突。

0x50AA8B98(opencv_highgui249d.dll) (template_example.exe)處有未經處理的異常:?0xC0000005:?讀取位置 0xACC6BCCD時發生訪問沖突。


還有一種情況是:


0x77715B68?處(位于?mouse_movement.exe?中)最可能的異常:?Microsoft?C++?異常:?cv::Exception,位于內存位置?0x010AF3C8?處。

0x77715B68?處(位于?mouse_movement.exe?中)有未經處理的異常:?Microsoft?C++?異常:?cv::Exception,位于內存位置?0x010AF3C8?處。

這是在debug下運行錯誤。

?


提示內存錯誤,算是Opencv的一個bug,在Debug下可以運行,在release下卻不能運行報錯。?

介紹一下來龍去脈:

在對Opencv進行配置的時候,配置鏈接庫的時候會有一堆 .lib的文件,其中Debug文件庫名有d結尾,release沒有d

如:opencv_video249d.libdebug庫。

opencv_video249.librelease庫。

按照一般的網上配置教程,會出現debug下可以運行,release下不能運行的情況(報錯原因是由于字符串讀取問題引起的如圖像載入不了,內存出現錯誤,指針錯誤等情況)。

因為在附加依賴項配置的時候,會優先選擇寫在前面的那一類lib作為支持的調試方式,一般我們把帶d的寫在前面,于是就出現了默認在debug下可以載入圖像,識別字符串等操作。如果把不帶d的寫在前面,那就默認release下調試。

解決方法:

在配置的時候就添加一類依賴項,如:就只添加帶d的那一類,于是就只支持debug模式下的調試,這時候想要在release下也能調試,就在當前工程的release模式下自己將不帶d的依賴項添加進去:【項目】—【屬性】—【配置屬性】—【鏈接器】—【輸入】—【附加依賴項】,添加即可。

上圖:1、選擇release模式調試

?

?

2、選擇當前項目屬性

?

?

3、添加附加依賴項:把不帶d的庫添加進去,運用就ok


4


至此完成。

?

感覺在配置的時候只添加一類,只添加帶d的或者只添加不帶d的庫,這樣在用到另外一種模式的時候再去修改當前工程的屬性配置(并不是之前的固有屬性)。這樣做讓人感覺更加清爽,兩個全部添加,畢竟系統只默認在前面的那一種庫





方式二:

添加以下代碼:

#ifndef _OPENCV_LIB_ #define _OPENCV_LIB_#ifdef _DEBUG #pragma comment(lib, "opencv_calib3d249d.lib") #pragma comment(lib, "opencv_contrib249d.lib") #pragma comment(lib, "opencv_core249d.lib") #pragma comment(lib, "opencv_features2d249d.lib") #pragma comment(lib, "opencv_flann249d.lib") #pragma comment(lib, "opencv_gpu249d.lib") #pragma comment(lib, "opencv_highgui249d.lib") #pragma comment(lib, "opencv_imgproc249d.lib") #pragma comment(lib, "opencv_legacy249d.lib") #pragma comment(lib, "opencv_ml249d.lib") #pragma comment(lib, "opencv_nonfree249d.lib") #pragma comment(lib, "opencv_objdetect249d.lib") #pragma comment(lib, "opencv_photo249d.lib") #pragma comment(lib, "opencv_stitching249d.lib") #pragma comment(lib, "opencv_ts249d.lib") #pragma comment(lib, "opencv_video249d.lib") #pragma comment(lib, "opencv_videostab249d.lib") #else #pragma comment(lib, "opencv_calib3d249.lib") #pragma comment(lib, "opencv_contrib249.lib") #pragma comment(lib, "opencv_core249.lib") #pragma comment(lib, "opencv_features2d249.lib") #pragma comment(lib, "opencv_flann249.lib") #pragma comment(lib, "opencv_gpu249.lib") #pragma comment(lib, "opencv_highgui249.lib") #pragma comment(lib, "opencv_imgproc249.lib") #pragma comment(lib, "opencv_legacy249.lib") #pragma comment(lib, "opencv_ml249.lib") #pragma comment(lib, "opencv_nonfree249.lib") #pragma comment(lib, "opencv_objdetect249.lib") #pragma comment(lib, "opencv_photo249.lib") #pragma comment(lib, "opencv_stitching249.lib") #pragma comment(lib, "opencv_ts249.lib") #pragma comment(lib, "opencv_video249.lib") #pragma comment(lib, "opencv_videostab249.lib") #endif#endif
重命名為:opencv_lib.h,把該文件放到opencv的包含路徑中:...\opencv\build\include\opencv2目錄下面,即和 #include <opencv2/opencv.hpp> 在同一個目錄,之后只需要包含頭文件 #include <opencv2/opencv_lib.h>

就可以在Debug和Release版本之間任意切換

當然要在包含庫中把原來的庫刪除即可

如有不足之處歡迎批評指正,原創作品,轉載請注明出處!謝謝!后續的學習總結會陸續推出!歡迎廣大愛好者交流!

?


?

總結

以上是生活随笔為你收集整理的Opencv学习笔记——release和debug两个模式的运行问题的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。