Computer >> Máy Tính >  >> Lập trình >> C ++

Làm thế nào để tạo một hình ảnh nhị phân trong OpenCV bằng C ++?

Hình ảnh nhị phân chỉ là một hình ảnh kỹ thuật số đại diện cho hai màu đen và trắng. Từ góc độ xử lý hình ảnh, một hình ảnh nhị phân chứa các pixel với hai giá trị có thể có - không và một. Khi giá trị của một pixel là 0, nó thể hiện một màu đen tuyền. Khi giá trị của pixel là 1, nó có nghĩa là màu trắng tinh khiết.

Trong một hình ảnh thang độ xám, có 256 giá trị có thể có khác nhau cho mỗi loại. Nhưng trong Binary Image, chỉ có hai giá trị khả dĩ. Hình ảnh nhị phân có nhiều loại ứng dụng khác nhau. Ví dụ:chuyển đổi hình thái yêu cầu hình ảnh nhị phân, trích xuất hình dạng đối tượng từ nền yêu cầu hình ảnh nhị phân, v.v. Sử dụng OpenCV, chúng tôi có thể tự do chuyển đổi hình ảnh thành hình ảnh nhị phân.

Ví dụ sau đây là chuyển đổi hình ảnh được tải trong ma trận 'original_image' thành hình ảnh thang độ xám và lưu trữ nó thành ma trận 'grayscale_image'-

cvtColor(original_image, grayscale_image, COLOR_BGR2GRAY);

Dòng tiếp theo là chuyển đổi hình ảnh thang độ xám thành hình ảnh nhị phân và lưu trữ hình ảnh đã chuyển đổi thành ma trận 'binary_image'.

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

Ở đây 'grayscale_image' là ma trận nguồn, "binary_image" là ma trận đích. Sau đó, có hai giá trị 100 và 255. Hai giá trị này đại diện cho phạm vi ngưỡng. Trong dòng này, phạm vi ngưỡng biểu thị các giá trị pixel thang độ xám sẽ được chuyển đổi.

Chương trình sau tải một hình ảnh và chuyển đổi nó thành một hình ảnh nhị phân.

Ví dụ

#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;
}

Đầu ra

Làm thế nào để tạo một hình ảnh nhị phân trong OpenCV bằng C ++?