首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
您现在的位置: 程式碼之家 >> 編程語言 >  >> 更多程式語言 >> 程式設計綜合問答

OpenCV cvCopy 影像拷貝失敗:深度與尺寸不匹配排查指南

     編輯:程式設計綜合問答

錯誤現象

呼叫 cvCopy(orgImage, result) 時程式崩潰,調試顯示影像變數正常,但 CMD 提示錯誤。

核心原因

cvCopy 要求源影像與目標影像具備相同尺寸、相同深度、相同通道數。代碼中:

IplImage *dst11 = cvCreateImage(dst_size11, dst->depth, dst->nChannels);

但 dst_size11 可能與 cvGetSize(orgImage) 不一致,或 rectInImage 區域超出邊界導致 ROI 設定異常。

修正步驟

  1. 驗證 ROI 區域有效性:cvRect 參數順序為 (x, y, width, height),代碼中誤用 rheight, rwidth 導致寬高顛倒
  2. 建立目標影像時使用 ROI 尺寸:cvCreateImage(cvSize(rect.width, rect.height), ...)
  3. 檢查 cvSetImageROI 回傳值(非零表示失敗)

修正後關鍵代碼

CvRect rect = cvRect(rx, ry, rwidth, rheight); // 修正寬高順序
IplImage *subImg = cvCreateImage(cvSize(rect.width, rect.height), 
                                 orgImage->depth, orgImage->nChannels);
cvSetImageROI(orgImage, rect);
cvCopy(orgImage, subImg); // 此處尺寸深度已匹配
cvResetImageROI(orgImage);

調試技巧

在拷貝前印出兩影像的 width, height, depth, nChannels, widthStep,確保完全一致。

  1. 上一篇文章:
  2. 下一篇文章:
Copyright © 程式碼之家 All Rights Reserved