如何使用 C++ 在 OpenCV 中创建二值图像?

opencvc++server side programmingprogramming更新于 2025/5/14 16:37:17

二值图像只是代表两种颜色(黑色和白色)的数字图像。从图像处理的角度来看,二值图像包含具有两个可能值的像素 - 零和一。当像素的值为 0 时,它表示纯黑色。当像素的值为 1 时,它表示纯白色。

在灰度图像中,每个图像都有 256 种不同的可能值。但在二值图像中,只有两个可能的值。二值图像具有不同类型的应用。例如,形态变换需要二值图像,从背景中提取对象形状需要二值图像等。使用 OpenCV,我们可以自由地将图像转换为二值图像。

以下示例是将加载到"original_image"矩阵中的图像转换为灰度图像并将其存储到"grayscale_image"中matrix-

cvtColor(original_image, grayscale_image, COLOR_BGR2GRAY);

下一行是将灰度图像转换为二值图像,并将转换后的图像存储到"binary_image"矩阵中。

threshold(grayscale_image, binary_image, 100, 255, THRESH_BINARY);

这里"grayscale_image"是源矩阵,"binary_image"是目标矩阵。之后有两个值100和255。这两个值代表阈值范围。在这一行中,阈值范围表示要转换的灰度像素值。

以下程序加载图像并将其转换为二进制图像。

示例

#include<iostream>
#include<opencv2/highgui/highgui.hpp>
#include<opencv2/imgproc/imgproc.hpp>
using namespace cv;
using namespace std;
int main(int argc, char** argv) {
   Mat original_image;//声明一个矩阵来加载原始图像//
   Mat grayscale_image;//声明一个矩阵来存储灰度图像//
   Mat binary_image;//声明一个矩阵来存储二进制图像
   namedWindow("Original Image");//声明窗口来显示二进制图像//
   namedWindow("Show Binary");//声明窗口来显示原始图像//
   original_image = imread("teddy.jpg");//将图像加载到矩阵中//
   cvtColor(original_image, grayscale_image, COLOR_BGR2GRAY);//将 BGR 转换为灰度图像并将其存储到转换后的矩阵中//
threshold(grayscale_image, binary_image, 100, 255, THRESH_BINARY);//将存储在转换后的矩阵中的灰度图像转换为二进制图像//
imshow("Original Image", original_image);//显示原始图像//
   imshow("Show Binary", binary_image);//显示二进制图像//
   waitKey(0);
   return 0;
}

输出


相关文章