1. 程式人生 > >opencv中怎麼修改影象大小,增加幾行

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,那麼原影象縮放之後的大小就要通過下面的公式來計算:

\texttt{dsize = Size(round(fx*src.cols), round(fy*src.rows))}

fx和fy就是下面要說的兩個引數,是影象width方向和height方向的縮放比例。

fx:width方向的縮放比例,如果它是0,那麼它就會按照\texttt{(double)dsize.width/src.cols}

來計算;

fy:height方向的縮放比例,如果它是0,那麼它就會按照\texttt{(double)dsize.height/src.rows}來計算;

那如果直接在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

, CvArr* dst, int interpolation=CV_INTER_LINEAR )

這時需要自己定義一個函式,來實現長和寬的增加,

//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是呼叫是不帶dpdb,debug除錯時是呼叫帶dpdb.

出現這種問題也許是一些小的問題和疏漏,例如圖片的載入路徑把/”換成“\

我的問題是:掩膜在轉換成灰度影象時,使用的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));

這樣寫也是可以的。