数据预处理——二值化 非openCV C++实现及案例
时间: 2023-11-20 09:06:41 浏览: 70
二值化是图像处理中常用的一种方法,它将一幅图像按照一定的阈值分成黑白两部分,可以用于图像增强、特征提取等方面。下面我将介绍如何用C++实现二值化并给出一个简单的案例。
二值化的实现流程如下:
1. 读入一幅灰度图像;
2. 选择阈值;
3. 将图像中每个像素的灰度值与阈值进行比较;
4. 如果像素的灰度值大于阈值,则将像素设为255(白色),否则设为0(黑色);
5. 输出处理后的二值图像。
下面是代码实现:
```c++
#include <iostream>
#include <fstream>
#include <string>
using namespace std;
int main()
{
// 读入灰度图像
ifstream fin("grayImg.txt");
int row, col;
fin >> row >> col;
int img[row][col];
for (int i = 0; i < row; i++) {
for (int j = 0; j < col; j++) {
fin >> img[i][j];
}
}
fin.close();
// 选择阈值
int threshold = 127;
// 二值化
int binImg[row][col];
for (int i = 0; i < row; i++) {
for (int j = 0; j < col; j++) {
if (img[i][j] > threshold) {
binImg[i][j] = 255;
} else {
binImg[i][j] = 0;
}
}
}
// 输出二值图像
ofstream fout("binImg.txt");
fout << row << " " << col << endl;
for (int i = 0; i < row; i++) {
for (int j = 0; j < col; j++) {
fout << binImg[i][j] << " ";
}
fout << endl;
}
fout.close();
return 0;
}
```
上述代码中,我们读入了一个灰度图像(格式为txt文件),然后选择了一个阈值127进行二值化处理,最后输出了处理后的二值图像。下面是一个简单的案例,我们将一张灰度图像二值化并输出:
原图像:
![grayImg](https://img-blog.csdn.net/20180315232758669?watermark/2/text/aHR0cDovL2Jsb2cuY3Nkbi5uZXQvemhhbmdzZ2h1Zw==/font/5a6L5L2T/fontsize/400/fill/I0JBQkFCMA==/dissolve/70/q/75)
二值图像:
![binImg](https://img-blog.csdn.net/20180315232952856?watermark/2/text/aHR0cDovL2Jsb2cuY3Nkbi5uZXQvemhhbmdzZ2h1Zw==/font/5a6L5L2T/fontsize/400/fill/I0JBQkFCMA==/dissolve/70/q/75)