Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/opencv/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C++ 二维卷积边界处理:零填充不起作用?_C++_Opencv_Convolution - Fatal编程技术网

C++ 二维卷积边界处理:零填充不起作用?

C++ 二维卷积边界处理:零填充不起作用?,c++,opencv,convolution,C++,Opencv,Convolution,我正在做一个家庭作业,我们需要写一个函数,得到一个图像和一个核,我们必须计算二维空间卷积。 使用高斯核我得到了预期的结果(模糊的图像),但如果我使用例如边缘检测核,我发现有些东西工作不正常(图像变得非常灰暗) 我猜问题要么是边界处理,它应该是零填充,但我不完全确定它是否正确实现,要么是最后的规范化。 是否有办法显示浮点图像(例如,浮点的一个像素的值为25000),因为我认为如果不使用标准化,它总是被限制在255(白色) #包括 #包括 #包括 #包括 int main(int argc,char

我正在做一个家庭作业,我们需要写一个函数,得到一个图像和一个核,我们必须计算二维空间卷积。 使用高斯核我得到了预期的结果(模糊的图像),但如果我使用例如边缘检测核,我发现有些东西工作不正常(图像变得非常灰暗)

我猜问题要么是边界处理,它应该是零填充,但我不完全确定它是否正确实现,要么是最后的规范化。 是否有办法显示浮点图像(例如,浮点的一个像素的值为25000),因为我认为如果不使用标准化,它总是被限制在255(白色)

#包括
#包括
#包括
#包括
int main(int argc,char*argv[])
{
cv::Mat img=cv::imread(“orig.jpg”,0);//将图像加载为灰度
img.convertTo(img,cv32fc1);//转换为浮点
cv::Mat_uu输出(img.rows,img.cols);//创建与源图像大小相同的新Mat
输出=0;
//创建内核(此处为高斯模糊)
cv::Mat_uu内核(5,5);

内核由于标准化,图像是灰色的。边缘检测将产生正值、负值或零值。零值增加到0.5,负值接近0,正值接近1。您得到了正确的结果。我将为您的高斯模糊不是真正的一个,因为您没有通过内核值之和进行恶意化。如果这样做,则在进行卷积后不需要对结果进行规格化。由于规格化,图像呈灰色。边缘检测将产生正值、负值或零值。零值增加到0.5,负值接近0,正值接近0接近1。您得到了正确的结果。我将在前言中说明高斯模糊不是真正的高斯模糊,因为您没有通过核值之和进行规格化。如果您这样做了,那么在进行卷积之后,您就不需要对结果进行规格化。