如何在 OpenCV 中使用 C++ 创建二值图像?
二值图像只是一个数字图像,它表示两种颜色:黑色和白色。从图像处理的角度来看,二值图像包含具有两个可能值的像素 - 零和一。当像素值为 0 时,它表示纯黑色。当像素值为 1 时,表示纯白色。
在灰度图像中,每个像素有 256 个不同的可能值。但在二值图像中,只有两个可能的值。二值图像具有不同类型的应用。例如,形态学变换需要二值图像,从背景中提取对象形状需要二值图像等。使用 OpenCV,我们可以自由地将图像转换为二值图像。
以下示例将加载到“original_image”矩阵中的图像转换为灰度图像,并将其存储到“grayscale_image”矩阵中 -
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;//declaring a matrix to load the original image// Mat grayscale_image;//declaring a matrix to store grayscale image// Mat binary_image;//declaring a matrix to store the binary image namedWindow("Original Image");//declaring window to show binary image// namedWindow("Show Binary");//declaring window to show original image// original_image = imread("teddy.jpg");//loading image into matrix// cvtColor(original_image, grayscale_image, COLOR_BGR2GRAY);//Converting BGR to Grayscale image and storing it into converted matrix// threshold(grayscale_image, binary_image, 100, 255, THRESH_BINARY);//converting grayscale image stored in converted matrix into binary image// imshow("Original Image", original_image);//showing Original Image// imshow("Show Binary", binary_image);//showing Binary Image// waitKey(0); return 0; }
输出
广告