cvResize()和cvPyrDown的比较

1.cvResize()函数用来放大或缩小图像,该函数可以将源图像精确转换为目标图像的尺寸。

函数形式:void cvResize( const CvArr* src, CvArr* dst, int interpolation=CV_INTER_LINEAR );

src:输入图像.
dst:输出图像.
interpolation:插值方法:
   • CV_INTER_NN - 最近邻插值,
   • CV_INTER_LINEAR -  线性插值 (默认)
   • CV_INTER_AREA -  区域插值
   • CV_INTER_CUBIC -  立方插值.

2.cvPyrDown()使用Gaussian金字塔分解对输入图像向下采样。

函数形式:void cvPyrDown(const CvArr*src,CvArr*dst,int filter=CV_GAUSSIAN_5x5);

src:输入图像。
dst:输出图像,其宽度和高度应是输入图像的一半。
filter :卷积滤波器类型,目前仅支持CV_GAUSSIAN_5x5。

示例代码:
#include
    
    
     
     
#include
     
     
      
      

int main(int argc, char** argv)
{
	
	IplImage* src = cvLoadImage("f:\\opencvEx\\fengjing3.jpg");

	IplImage* resize1 = cvCreateImage(cvSize(src->width / 2, src->height / 2), src->depth, src->nChannels);
	IplImage* resize2 = cvCreateImage(cvSize(resize1->width / 2, resize1->height / 2), resize1->depth, resize1->nChannels);
	//IplImage* resize3 = cvCreateImage(cvSize(resize2->width / 2, resize2->height / 2), resize2->depth, resize2->nChannels);

	IplImage* down1 = cvCreateImage(cvSize(src->width / 2, src->height / 2), src->depth, src->nChannels);
	IplImage* down2 = cvCreateImage(cvSize(down1->width / 2, down1->height / 2), down1->depth, down1->nChannels);
	//IplImage* down3 = cvCreateImage(cvSize(down2->width / 2, down2->height / 2), down2->depth, down2->nChannels);

	//调用3次cvResize函数
	cvResize(src, resize1);
	cvResize(resize1, resize2);
	//cvResize(resize2, resize3);

	//调用3次cvPyrDown函数
	cvPyrDown(src, down1);
	cvPyrDown(down1, down2);
	//cvPyrDown(down2, down3);

	cvNamedWindow("src");
	cvNamedWindow("resize one");
	cvNamedWindow("resize two");
	//cvNamedWindow("resize three");

	cvNamedWindow("down one");
	cvNamedWindow("down two");
	//cvNamedWindow("down three");

	cvShowImage("src", src);

	cvShowImage("resize one", resize1);
	cvShowImage("resize two", resize2);
	//cvShowImage("resize three", resize3);

	cvShowImage("down one", down1);
	cvShowImage("down two", down2);
	//cvShowImage("down three", down3);

	//将生成的图片保存到f:\opencvEx\output文件夹下
	char* filename1 = "F:\\opencvEx\\output\\origin.jpg";

	char* filename2 = "F:\\opencvEx\\output\\resize1.jpg";
	char* filename3 = "F:\\opencvEx\\output\\resize2.jpg";
	//char* filename4 = "F:\\opencvEx\\output\\resize3.jpg";

	char* filename5 = "F:\\opencvEx\\output\\down1.jpg";
	char* filename6 = "F:\\opencvEx\\output\\down2.jpg";
	//char* filename7 = "F:\\opencvEx\\output\\down3.jpg";

	cvSaveImage(filename1, src);
	cvSaveImage(filename2, resize1);
	cvSaveImage(filename3, resize2);
	//cvSaveImage(filename4, resize3);

	cvSaveImage(filename5, down1);
	cvSaveImage(filename6,down2);
	//cvSaveImage(filename7, down3);
	 
	cvWaitKey(0);

	cvReleaseImage(&src);
	cvReleaseImage(&resize1);
	cvReleaseImage(&resize2);
	//cvReleaseImage(&resize3);

	cvReleaseImage(&down1);
	cvReleaseImage(&down2);
	//cvReleaseImage(&down3);

	cvDestroyAllWindows();
	
	return 0;
}
     
     
    
    
运行结果:



从运行结果可以看出cvPyrDown()处理过的图片比cvResize()处理过的图片更模糊一些。
另外,要注意使用这两个函数时,对图像尺寸的要求。

引用和分别是关于使用OpenCV库中的cvResize函数进行图像缩放的示例代码。cvResize函数可以将一个图像缩放至指定尺寸。在引用中的代码示例中,首先加载一张名为"1.jpg"的图像,然后对其进行缩放,并创建一个缩放后的图像dst,最后显示原始图像和缩放后的图像。在引用中的代码示例中,出现了一个错误,错误信息为"OpenCV(4.2.0) ..\modules\imgproc\src\resize.cpp:4045: error: (-215:Assertion failed) !ssize.empty() in function 'cv::resize'",这个错误的原因是输入的图像尺寸为空。在引用中的代码片段是为了计算缩放比例而计算的fx的值。<span class="em">1</span><span class="em">2</span><span class="em">3</span> #### 引用[.reference_title] - *1* *3* [opencv改变图像大小cvResize和resize及其原理](https://blog.csdn.net/Game_jqd/article/details/122914585)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v93^chatsearchT3_2"}}] [.reference_item style="max-width: 50%"] - *2* [cv2.error: OpenCV(4.2.0)resize.cpp:4045: error: (-215:Assertion failed) !ssize.empty() in function](https://blog.csdn.net/qq_42178122/article/details/119324685)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v93^chatsearchT3_2"}}] [.reference_item style="max-width: 50%"] [ .reference_list ]
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值