【OpenCV入门教程之十三】OpenCV图像金字塔:高斯金字塔、拉普拉

其中,dsize,fx,fy都不能为0。

若要缩小图像,一般情况下最好用CV_INTER_AREA来插值,

而若要放大图像,一般情况下最好用CV_INTER_CUBIC(效率不高,慢,不推荐使用)或CV_INTER_LINEAR(效率较高,速度较快,推荐使用)。

关于插值,我们看几张图就能更好地理解。先看原图:

当进行6次图像缩小接着6次图像放大操作后,两种不同的插值方式得到的效果图:

效果很明显,第一张全是一个个的像素,非常影响美观。另外一张却有雾化的朦胧美感,所以插值方式的选择,对经过多次放大缩小的图片最终得到的效果是有很大影响的。

接着我们来看两种resize的调用范例。

方式一,调用范例:

Mat dst=Mat::zeros(512 ,512, CV_8UC3 );//新建一张512×512尺寸的图片Mat src=imread(“1.jpg”);//显式指定dsize=dst.size(),那么fx和fy会其计算出来,不用额外指定。resize(src, dst, dst.size());

方式二、调用范例:

Mat dst;Mat src=imread(“1.jpg”) //指定fx和fy,让函数计算出目标图像的大小。resize(src, dst, Size(), 0.5, 0.5);

接着我们看看完整的示例程序:

//———————————–【头文件包含部分】—————————————//描述:包含程序所依赖的头文件//———————————————————————————————- #include <opencv2/opencv.hpp>#include <opencv2/imgproc/imgproc.hpp>//———————————–【命名空间声明部分】—————————————//描述:包含程序所使用的命名空间//———————————————————————————————– using namespace cv;//———————————–【main( )函数】——————————————–//描述:控制台应用程序的入口函数,,我们的程序从这里开始//———————————————————————————————–int main( ){//载入原始图Mat srcImage = imread("1.jpg"); //工程目录下应该有一张名为1.jpg的素材图Mat tmpImage,dstImage1,dstImage2;//临时变量和目标图的定义tmpImage=srcImage;//将原始图赋给临时变量//显示原始图 imshow("【原始图】", srcImage);//进行尺寸调整操作resize(tmpImage,dstImage1,Size( tmpImage.cols/2, tmpImage.rows/2 ),(0,0),(0,0),3);resize(tmpImage,dstImage2,Size( tmpImage.cols*2, tmpImage.rows*2 ),(0,0),(0,0),3);//显示效果图 imshow("【效果图】之一", dstImage1); imshow("【效果图】之二", dstImage2);waitKey(0); return 0; }

程序运行截图:

四、pyrUp()函数剖析

pyrUp( )函数的作用是向上采样并模糊一张图像,说白了就是放大一张图片。

C++: void pyrUp(InputArray src, OutputArraydst, const Size& dstsize=Size(), int borderType=BORDER_DEFAULT )

第四个参数,int类型的borderType,又来了,边界模式,一般我们不用去管它。

pyrUp函数执行高斯金字塔的采样操作,其实它也可以用于拉普拉斯金字塔的。

首先,它通过插入可为零的行与列,对源图像进行向上取样操作,然后将结果与pyrDown()乘以4的内核做卷积,就是这样。

直接看完整的示例程序:

//———————————–【头文件包含部分】—————————————//描述:包含程序所依赖的头文件//———————————————————————————————- #include <opencv2/opencv.hpp>#include <opencv2/imgproc/imgproc.hpp>//———————————–【命名空间声明部分】—————————————//描述:包含程序所使用的命名空间//———————————————————————————————– using namespace cv;//———————————–【main( )函数】——————————————–//描述:控制台应用程序的入口函数,我们的程序从这里开始//———————————————————————————————–int main( ){//载入原始图Mat srcImage = imread("1.jpg"); //工程目录下应该有一张名为1.jpg的素材图Mat tmpImage,dstImage;//临时变量和目标图的定义tmpImage=srcImage;//将原始图赋给临时变量//显示原始图 imshow("【原始图】", srcImage); //进行向上取样操作pyrUp( tmpImage, dstImage, Size( tmpImage.cols*2, tmpImage.rows*2 ) );//显示效果图 imshow("【效果图】", dstImage);waitKey(0);return 0; }

程序运行截图:

有的旅行是为了拓宽眼界,浏览风景名胜。

【OpenCV入门教程之十三】OpenCV图像金字塔:高斯金字塔、拉普拉

相关文章:

你感兴趣的文章:

标签云: