天天看點

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

opencv中怎麼修改圖像大小,增加幾行

fx和fy就是下面要說的兩個參數,是圖像width方向和height方向的縮放比例。

fx:width方向的縮放比例,如果它是0,那麼它就會按照

opencv中怎麼修改圖像大小,增加幾行

來計算;

fy:height方向的縮放比例,如果它是0,那麼它就會按照

opencv中怎麼修改圖像大小,增加幾行

來計算;

那如果直接在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這個錯誤

opencv中怎麼修改圖像大小,增加幾行

在網上百度查找,也有好多人遇到這個問題,在debug調試時,這個問題就會出現,如果release調試時,就不會出現,因為在release是調用是不帶d的pdb,debug調試時是調用帶d的pdb.

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

我的問題是:掩膜在轉換成灰階圖像時,使用的COLOR_RGB2GRAY  opencv中存儲一直按照BGR順序進行存儲的,

改成COLOR_BGR2GRAY 就是這個問題導緻一直出現這個錯誤。

方法二:

如果檢視cvResize()函數的定義:

opencv中怎麼修改圖像大小,增加幾行

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));

這樣寫也是可以的。