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, 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是调用是不带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));
这样写也是可以的。