opencv学习笔记10图像金子塔 1.目标 使用OpenCV函数cv :: pyrUp和cv :: pyrDown对给定图像进行下采样或上采样。 2.什么是图像金字塔 我们都知道图像金字塔都上上面细下面粗的,如果我们将图片躺平如下图 每一层的图片都是同一张图片,那每一层变化了什么,很明显每一层的维度不一样了。比如最下面一层原来是16x16的矩阵现在上面一层变成了10x10,变化之后的改变,不可否认的是他的数据变少了,存储空间更少了,但带来的也是数据的流失。 实现方法就是那一个其与高斯内核进行卷积:如果有人想问高斯内核是啥,内核就是一个矩阵里面有数值,让图像和其进行卷积就会实现我们想要的目标,至于为什么能实现,这不是我们要解决的问题,会用就行。 code #include “opencv2/imgproc.hpp” #include “opencv2/imgcodecs.hpp” #include “opencv2/highgui.hpp” using namespace cv; Mat src, dst, tmp; const char* window_name = “Pyramids Demo”; //提示一下记住创建窗口的必须都是字符串的形式
int main( void )
{
printf( "\n Zoom In-Out demo \n " );
printf( "------------------ \n" );
printf( " * [u] -> Zoom in \n" );
printf( " * [d] -> Zoom out \n" );
printf( " * [ESC] -> Close program \n \n" );
src = imread( "../data/chicky_512.png" );
if( src.empty() )
{ printf(" No data! -- Exiting the program \n");
return -1; }
tmp = src;
dst = tmp;
imshow( window_name, dst );
for(;;)
{
char c = (char)waitKey(0);
if( c == 27 )
{ break; }
if( c == 'u' )
{ pyrUp( tmp, dst, Size( tmp.cols*2, tmp.rows*2 ) );
printf( "** Zoom In: Image x 2 \n" );
}
else if( c == 'd' )
{ pyrDown( tmp, dst, Size( tmp.cols/2, tmp.rows/2 ) );
printf( "** Zoom Out: Image / 2 \n" );
}
imshow( window_name, dst );
tmp = dst;
}
return 0;
}
代码补充解析
pyrUp()
void cv::pyrUp ( InputArray src,
OutputArray dst,
const Size & dstsize = Size(),
int borderType = BORDER_DEFAULT
)
最后一个传入值,可以为空,就第三个数值在里面输入你想要的大小即可 另一个pyrDown同理
|