opencv中怎麼修改影象大小,增加幾行
opencv中影象的大小可以通過一個resize()函式調整:
void resize(InputArray src, OutputArray dst, Size dsize, double fx=0, double fy=0, int interpolation=INTER_LINEAR );
引數意思:
dsize:輸出影象的大小。如果這個引數不為0,那麼就代表將原影象縮放到這個Size(width,height)指定的大小;如果這個引數為0,那麼原影象縮放之後的大小就要通過下面的公式來計算:
fx和fy就是下面要說的兩個引數,是影象width方向和height方向的縮放比例。
fx:width方向的縮放比例,如果它是0,那麼它就會按照
fy:height方向的縮放比例,如果它是0,那麼它就會按照來計算;
那如果直接在size中增加幾行,按下面格式寫就是不對:
方法一:
resize(globalval.mask_Image, globalval.mask_Image, Size((globalval.mask_Image.rows + 2), (globalval.mask_Image.cols + 2)));
所以這麼直接加2是不對的,只能是乘以一個數。
那在opencv中怎麼增加幾行幾列呢,這是就需要cvResize()函式,該函式也是實現影象的放大和縮小,不過引數不同
C: void cvResize(const CvArr* src
這時需要自己定義一個函式,來實現長和寬的增加,
//對mat2的長和寬重新賦值
void myResize(Mat &img1, Mat &img2, int width, int height)
{
IplImage pI_1 = img1, pI_2;
img2 = Mat(width, height, CV_8UC1,1);//一定要加這個型別,要不然圖片格式不同
pI_2 = img2;
cvResize(&pI_1, &pI_2, 1);
}
在主函式呼叫的時候,長寬做相應的增加即可:
myResize(mask_Image,mask_Image, src_Image.rows + 2, src_Image.cols + 2);
但是在呼叫cvResize函式時出現了一個錯誤:未載入 opencv_imgpro2410d.pdb這個錯誤
在網上百度查詢,也有好多人遇到這個問題,在debug除錯時,這個問題就會出現,如果release除錯時,就不會出現,因為在release是呼叫是不帶d的pdb,debug除錯時是呼叫帶d的pdb.
出現這種問題也許是一些小的問題和疏漏,例如圖片的載入路徑把“/”換成“\”
我的問題是:掩膜在轉換成灰度影象時,使用的COLOR_RGB2GRAY opencv中儲存一直按照BGR順序進行儲存的,
改成COLOR_BGR2GRAY 就是這個問題導致一直出現這個錯誤。
方法二:
如果檢視cvResize()函式的定義:
Size mask_size(src_Image.cols + 2, globalval.src_Image.rows + 2);
resize(mask_Image, mask_Image, mask_size, (double)(mask_size.width / src_Image.cols), (double)(mask_size.height / src_Image.rows));
這樣寫也是可以的。