图像处理与颜色计算全解析
1. 图像像素处理基础
在处理图像时,为了访问前一行和后一行的相邻像素,我们需要定义额外的指针并共同递增它们,然后在扫描循环中访问这些行的像素。在计算输出像素值时,会调用 cv::saturate_cast 模板函数,这是因为对像素进行数学运算的结果可能超出允许的像素值范围(即低于 0 或高于 255)。该函数会将负值变为 0,大于 255 的值变为 255,如果输入参数是浮点数,结果会四舍五入到最接近的整数。
对于无法处理的边界像素(因为其邻域未完全定义),我们可以单独处理。通常将它们设置为 0,例如使用 result.row(0).setTo(cv::Scalar(0)); 将结果图像第一行的所有像素值设为 0。对于 3 通道彩色图像,可使用 cv::Scalar(a,b,c) 为每个通道指定值。
当对像素邻域进行计算时,通常用核矩阵表示。以锐化滤波器为例,其核矩阵如下:
| -1 | -1 | -1 |
|----|----|----|
| -1 | 5 | -1 |
| -1 | -1 | -1 |
核矩阵的中心对应当前像素,每个单元格的值是对应像素的乘数,应用核矩阵到像素的结果是所有乘积的总和。OpenCV 提供了 cv::filter2D 函数来应用核矩阵进行滤波,示例代码如下:
void sharpen2D(const cv::Mat &image, cv::Mat &re
超级会员免费看
订阅专栏 解锁全文

被折叠的 条评论
为什么被折叠?



