保健品网站建设方案书模板,wordpress怎么修改文字大小,大型企业网站建设方案,网上服装商城网站建设方案策划书基础入门 图像阈值处理是一种二值化技术#xff0c;它基于预设的阈值#xff0c;可以将图像中的像素分为两大类#xff1a;一大类是背景#xff0c;另一大类是前景或目标对象。这个过程涉及将图像中的每个像素值与阈值进行比较#xff0c;并根据比较结果决定保留原始值还是…基础入门 图像阈值处理是一种二值化技术它基于预设的阈值可以将图像中的像素分为两大类一大类是背景另一大类是前景或目标对象。这个过程涉及将图像中的每个像素值与阈值进行比较并根据比较结果决定保留原始值还是替换为新值新值通常是二值化后的0或255。 OpenCV提供了cv::threshold()函数以实现基本的阈值处理。
double threshold(InputArray src, OutputArray dst, double thresh, double maxval, int type); 各个参数的含义如下。 src输入的单通道图像通常为灰度图像。 dst输出图像与src尺寸相同类型根据type参数确定。 thresh阈值。 maxval当像素值超过阈值时设置的新值。 type阈值类型常见的取值如下。 cv::THRESH_BINARY大于阈值设为maxval否则设为0。 cv::THRESH_BINARY_INV小于阈值设为maxval否则设为0。 cv::THRESH_TRUNC大于阈值的像素设为阈值其余不变。 cv::THRESH_TOZERO小于阈值的像素设为0其余不变。 cv::THRESH_TOZERO_INV大于阈值的像素设为0其余不变。 实战解析 下面的实战代码完成了一个基本的图像处理任务 —— 将一张灰度图像转换成二值图像。 首先我们创建一个Mat类型的变量img并尝试使用imread函数读取图片通过参数IMREAD_GRAYSCALE指定以灰度模式加载。接下来我们调用threshold函数对灰度图像img进行阈值处理将其转换为二值图像。这里阈值被设置为127阈值类型为THRESH_BINARY。这意味着所有像素值大于或等于127的将被设为最大值255代表白色其余设为0代表黑色。最后分别使用imshow函数显示原始的灰度图像和经过二值化处理后的图像。
#include opencv2/opencv.hpp
#include iostreamusing namespace cv;
using namespace std;int main()
{Mat img imread(OpenCV.png, IMREAD_GRAYSCALE);if (img.empty()){cout Can not open or find the image endl;return -1;}Mat binaryImg;threshold(img, binaryImg, 127, 255, THRESH_BINARY);imshow(Original Image, img);imshow(Binary Image, binaryImg);waitKey(0);return 0;
} 执行上面的代码运行效果可参考下图。 在实际应用中阈值的选择往往直接影响到后续处理的效果特别是对于光照变化大、噪声较多的图像。此时可以使用下面的自适应阈值处理方法。它能够根据图像局部特性动态调整阈值特别适合于处理光照不均匀的场景比如车牌识别、文档扫描等应用。 自适应阈值处理 自适应阈值处理是一种更智能的图像二值化方法它不像普通阈值处理那样使用单一固定阈值而是针对图像的不同区域或区块计算各自的阈值以适应局部的亮度变化。这对于光照不均匀的图像特别有效能够更好地保留图像细节。 在OpenCV中自适应阈值处理使用cv::adaptiveThreshold()函数其声明如下。
void adaptiveThreshold(InputArray src, OutputArray dst, double maxValue, int adaptiveMethod, int thresholdType, int blockSize, double C); 其参数含义与cv::threshold()类似额外参数的含义如下。 adaptiveMethod自适应方法常见取值有cv::ADAPTIVE_THRESH_MEAN_C均值和cv::ADAPTIVE_THRESH_GAUSSIAN_C高斯加权。 blockSize用于计算局部阈值的邻域大小通常选择奇数值以便有明确的中心像素点。 C常数项从计算出的局部阈值中减去或加上这个常数用于调整最终的阈值。 下面的实战代码演示了使用adaptiveThreshold函数进行自适应阈值处理的情形。
#include opencv2/opencv.hpp
#include iostreamusing namespace cv;
using namespace std;int main()
{Mat img imread(OpenCV.png, IMREAD_GRAYSCALE);if (img.empty()){cout Can not open or find the image endl;return -1;}// 自适应阈值处理Mat adaptiveThreshImg;adaptiveThreshold(img, adaptiveThreshImg, 255, ADAPTIVE_THRESH_MEAN_C, THRESH_BINARY, 11, 2);imshow(Original Image, img);imshow(Adaptive Threshold Image, adaptiveThreshImg);waitKey(0);return 0;
} 执行上面的代码运行效果可参考下图。可以看到经过自适应阈值处理后图像的轮廓变得格外清晰。自适应阈值处理方法适用于复杂光照条件下图像的预处理有助于提高后续图像分析和识别的准确率。