二值化
二值化是将图像使用黑和白两种颜色表示的方法。再二值化之前我们需要将图片进行灰度化处理,使三通道图片编程单通道,便于处理。
我们将灰度的阈值设置为
128
128
128来进行二值化,即:
y
=
{
0
(
if
y
<
128
)
255
(
else
)
y= \begin{cases} 0& (\text{if}\quad y < 128) \ 255& (\text{else}) \end{cases}
y={0(ify<128) 255(else)
代码实现
#include<opencv2/opencv.hpp>
#include<iostream>
using namespace cv;
//二值化
Mat binarize(Mat img, int th)
{
//获取图像宽高
int height = img.rows;
int width = img.cols;
//创建输出图像画布
Mat out = Mat::zeros(height, width, CV_8UC1);
//遍历图像
for (int y = 0; y < height; y++)
{
for (int x = 0; x < width; x++)
{
if (img.at<uchar>(y, x) > th)
{
out.at<uchar>(y, x) = 255;
}
else
{
out.at<uchar>(y, x) = 0;
}
}
}
return out;
}
int main()
{
Mat img = imread("lena.jpg");
imshow("lena", img);
//灰度化
cvtColor(img, img, COLOR_BGRA2GRAY);
//二值化
Mat out = binarize(img,128);
imshow("sample", out);
waitKey(0);
return 0;
}
结果显示
原图
结果