
前面的结果除以蓝色方框里的东西是什么呢?为什么要进行这样处理?看的视频,老师没有讲解,个人认为是因为类似于图下图个操作
小白一枚,刚刚接触opencv,请多多指教,十分感谢!

前面的结果除以蓝色方框里的东西是什么呢?为什么要进行这样处理?看的视频,老师没有讲解,个人认为是因为类似于图下图个操作
小白一枚,刚刚接触opencv,请多多指教,十分感谢!
以下回答参考 皆我百晓生、券券喵儿 等免费微信小程序相关内容作答,并由本人整理回复。
在OpenCV中,filter2D函数是用于计算图像上的二维滤波器。这个函数接受几个参数:
src: 输入图像。dst: 输出图像。kernel: 滤波器的大小和形状。dty: 对于Y方向的滤波器,如果为负数,则输出图像中的值将被乘以-1。在这个例子中,我们使用了ones函数来创建一个与输入图像相同尺寸的、全为1的矩阵。然后我们将这个矩阵作为滤波器的系数传递给filter2D函数,并将其应用到输入图像上。这相当于对输入图像进行了高斯模糊或边缘检测等操作。
至于你提到的"自定义算子",通常情况下,OpenCV提供了一系列预定义的算子,如高斯滤波、中值滤波、均值滤波、梯度算子等。如果你想要实现一个自定义的算子,你可以通过编写一个函数来实现所需的运算,并将其传递给filter2D函数。例如,你可以实现一个简单的高斯滤波函数,如下所示:
void gaussianBlur(Mat &src, Mat &dst, int kernelSize)
{
float sigmaX = 1 / sqrt((double)kernelSize * 2.0);
float sigmaY = 1 / sqrt((double)kernelSize * 2.0);
for(int i = 0; i < src.rows; i++)
for(int j = 0; j < src.cols; j++)
dst.at<uchar>(i,j) = src.at<uchar>(i,j) + sigmaX*(rand()/(float)RAND_MAX)*sigmaY*(rand()/(float)RAND_MAX);
}
在这个函数中,我们首先计算了高斯核的宽度和高度(半径),然后生成了一个随机的高斯噪声。最后,我们用这个噪声填充输入图像的一部分区域。
请注意,上述代码是一个非常基础的例子,实际的应用可能会更复杂。你可能还需要考虑其他因素,如噪声抑制、边缘检测、颜色空间转换等。