目前我正在使用iplimage的高斯模糊。 像这样,
# include "stdio.h"
# include "highgui.h"
# include "cv.h"
int main( int argc, char** argv ) {
IplImage* img = 0;
IplImage* out = 0;
if( argc < 2 ) {
printf( "Usage: Accepts one image as argument\n" );
exit( EXIT_SUCCESS );
}
img = cvLoadImage( argv[1] );
if( !img ) {
printf( "Error loading image file %s\n", argv[1]);
exit( EXIT_SUCCESS );
}
out = cvCreateImage( cvGetSize(img), IPL_DEPTH_8U, 3 );
cvSmooth( img, out, CV_GAUSSIAN, 3, 3 );
cvReleaseImage( &img );
cvReleaseImage( &out );
cvDestroyWindow( "Example1" );
cvDestroyWindow( "Output" );
return EXIT_SUCCESS;
}
但我不知道在iplimage的高斯模糊中使用了什么系数。
我如何知道iplimage的高斯模糊系数?
答案 0 :(得分:1)
IplImage没有任何高斯模糊系数。 IplImage是英特尔处理库中用于存储图像数据的数据结构。
如何找到过滤器操作中使用的系数? 那么你读了手册并找出......
http://docs.opencv.org/3.0-beta/modules/imgproc/doc/filtering.html#smooth
因为你没有在你的函数调用中提供sigma(或者在别人的函数调用中说因为我怀疑你编写了那段代码),所以默认为0。
cvSmooth( img, out, CV_GAUSSIAN, 3, 3 );
在高斯参数的情况下,该参数可以指定 高斯西格玛(标准偏差)。如果它为零,则计算它 从内核大小:
sigma = 0.3(n / 2 - 1)+ 0.8
其中n是你的内核大小
对小内核使用标准sigma(3 x 3到7 x 7) 提供更好的速度。如果sigma1不为零,则size1和size2为 零,内核大小是从sigma计算出来的(提供 准确的操作)。