源代碼:

//crop image

IplImage *imgTemp = imgcrop(rect, img); //從原圖img中裁剪出rect區域的圖像patch,該方法編譯運行均無誤

if(!imgTemp){

LOOGE<

cvReleaseImage(&imgTemp);imgTemp = 0;//如果裁剪出錯,釋放imgTemp

return -1;

}

//resize image

IplImage* newImg = imageResize(imgTemp, sideControl); //將imgTemp最長邊控制為sideControl進行resize,保存為newImg

if(!newImg){

LOOGE<

cvReleaseImage(&imgTemp);imgTemp = 0;//如果resize出錯,釋放imgTemp和newImg,繼續下一次循環

cvReleaseImage(&newImg);newImg = 0;

return -1;

}

//save image crops

cvSaveImage( “newImg.jpg”, newImg );//保存newImg,此處為上述做裁剪及resize的最終目的!!!

//release

cvReleaseImage(&imgTemp);imgTemp = 0;

cvReleaseImage(&newImg);newImg = 0;

bug分析:

(1)如果imageResize時出錯,那么會釋放掉imgTemp和newImg兩個變量,且程序退出運行;

(2)否則,程序正常進行,在接下來進行的釋放中,第一條cvReleaseImage中的imgTemp可以正常釋放,而第二條中釋放newImg運行時出錯;

(3)將兩條cvReleaseImage調換了順序,先釋放newImg正常,后釋放imgTemp時運行出錯;

(4)將

cvReleaseImage(&imgTemp);imgTemp = 0;

放到了

cvSaveImage("newImg.jpg", newImg);前面后,編譯通過,但運行至cvSaveImage處,出現錯誤信息如下:

OpenCV Error: Bad argument (Unknown array type) in cvarrToMat, file /home/tangyuan/programs/opencv-2.4.11/modules/core/src/matrix.cpp, line 698

terminate called after throwing an instance of 'cv::Exception'

what(): /home/tangyuan/programs/opencv-2.4.11/modules/core/src/matrix.cpp:698: error: (-5) Unknown array type in function cvarrToMat

此時查看了cvSaveImage的返回值為1;

(5)實在是心累,判定應該是imageResize返回IplImage*時出的問題,為了將最終resize后的圖像保存下來,遂將cvSaveImage直接寫在了imageResize方法里面進行圖像保存,imageResize的返回值設為int不再是IplImage*。

問題解決。。。

雖然問題解決了,但我的內心依舊是凌亂而悲痛的。。。

cvsaveimage 异常_C++ IplImage*的若干bug之三:cvSaveImage問題相关推荐

  1. WPF .NET 4.0 OpenClipboard 失败 (异常来自 HRESULT:0x800401D0 (CLIPBRD_E_CANT_OPEN)) BUG解决

    WPF .NET 4.0 OpenClipboard 失败 (异常来自 HRESULT:0x800401D0 (CLIPBRD_E_CANT_OPEN)) BUG解决 参考文章: (1)WPF .NE ...

  2. 受检异常 非受检异常_C++异常实战之十一 使用scope_fail处理复杂场景(非fail-fast)下的异常...

    本章引入一个额外的机制scope_exit/scope_fail,以处理复杂场景下的cleanup与rollback,同时,对RAII语义进行一定语义上的修正,以提供一个更加友好的异常处理的心智模型. ...

  3. linux内核 异常 log,Linux Kernel WARN()/BUG(), Oops/Panic, Tainted分析

    稳定性范畴, 参考5.x kernel. kernel Oops Oops指的就是内核的不正确行为,比如对驱动来说:static int i82092aa_pci_probe(struct pci_d ...

  4. c 异常 java异常_C ++和Java中异常处理的比较

    如今,几乎所有面向对象的语言都具有异常处理功能.在C ++和Java中,我们也可以获得这种功能.C ++中的异常处理和Java中的异常处理之间有一些相似之处,例如在两种语言中,我们都必须使用try-c ...

  5. c# 溢出抛异常_C#中的int是否没有溢出异常?

    在C#中,OverflowException不会引发(在VB中,默认情况下会引发异常). 为了获得排他性,您必须将代码嵌入checked上下文中: byte value = 241; checked ...

  6. 辐射避难所买了东西显示服务器异常,辐射避难所有哪些BUG 现存BUG说明及解决方法盘点...

    ‍ ‍绝大部分游戏都有bug,辐射避难所怎么能免俗呢?盘点一下这破游戏中的各种bug,部分是能解决的,不能解决的可尽量避免.‍ 1,永远不开心的人.这个bug是一个小人的快乐度永远是10%,rush, ...

  7. c# 溢出抛异常_C#捕获堆栈溢出异常

    C#捕获堆栈溢出异常 我得到了一个抛出堆栈溢出异常的方法的递归调用. 第一个调用被try catch块包围,但没有捕获异常. 堆栈溢出异常是否以特殊方式运行? 我可以正确捕获/处理异常吗? 注意:如果 ...

  8. 如何获取exception的target异常_C# 基础知识系列- 15 异常处理篇

    0. 前言 为什么我们需要异常处理?什么是异常? 在汉语中,异常指非正常的:不同于平常的.翻译到程序中,就是指会导致程序无法按照既定逻辑运行的意外,或者说是错误.可能会有小伙伴好奇了,我们的程序不是正 ...

  9. java聊天系统异常问题_聊天室bug问题

    1.页面一直在index.jsp,因为input表单里的name写成valuele了 2.history.go(0); 3.头文件不能随便删,中转文件的才能删 4.每取一次application,就要 ...

最新文章

  1. 在Ubuntu上源码安装MySQL+安装问题解决+安全优化
  2. MIT媒体实验室主任辞去一切职务:拿了爱泼斯坦170万美金,涉及程序违规,麻省理工宣布彻查...
  3. 「WC2018」即时战略
  4. java23种模式之单例模式
  5. DeepNude已迅速下线,来看看它涉及的图像修复技术
  6. 句柄与指针的区别(一)
  7. chrome浏览器 提示Adobe Flash Player未安装的解决方法
  8. 在dom最前面插入_虚拟 DOM 到底是什么?
  9. 最新微信小程序抓包方法
  10. Delphi中TWebBrowser的用法
  11. matlab 有限元分析与应用,matlab有限元分析与应用(书及源程序)
  12. ENVI实验教程(3)遥感图像预处理—几何校正
  13. 易语言php验证码识别,易语言自动打码验证码服务端带案例
  14. R语言基本用法(主要为时间序列分析方面)
  15. 分区软件工具哪个好用
  16. 先吃奶油还是先吃蛋糕--推迟满足感
  17. VUE 爬坑之旅 -- vue 项目中将简体转换为繁体
  18. FastDFS,Redis,Solr,ActiveMQ核心技术整合五
  19. 组合数学 (三): 排列组合的数学逻辑
  20. Git仓库数据损坏后如何恢复

热门文章

  1. 响应式布局技术:App如何适配不同尺寸的设备
  2. 文件系统:隐匿在 Linux 背后的机制
  3. 大剧播出无人值守“心里不慌”,优酷全链路技术齐上阵
  4. Python 数据分析实战,揭秘国内顶尖医院分布现状!
  5. 2019 互联网大事记:谁是最后的赢家?
  6. 开发人员在编写 HTML 和 CSS 时最常犯的六大错误
  7. 开发小程序遇协同、平台兼容难题,该如何破局?
  8. 小小的 Python 编程故事
  9. 5G 是时候商用了?| 程序员硬核评测
  10. 国内首部智能设备安全报告:预计 2019 年漏洞增长率超 20%