opencv中怎么修改图像大小,增加几行

本文介绍了在OpenCV中如何使用resize()函数修改图像的大小,以及如何正确增加图像的行和列。通过创建自定义函数myResize()利用cvResize()实现尺寸增加,并解决了在调试过程中遇到的pdb文件加载错误。还提到了使用COLOR_BGR2GRAY而不是COLOR_RGB2GRAY进行灰度转换的重要性。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

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

这样写也是可以的。



评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值