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

Làm thế nào để giảm màu bằng cách sử dụng Phương pháp con trỏ trong OpenCV?

Trong xử lý ảnh, chúng tôi thực hiện tính toán trên ảnh. Cụ thể hơn, chúng tôi thực hiện phép tính trên pixel nên số lượng pixel càng cao thì việc tính toán càng tốn nhiều thời gian. Để giảm thời gian tính toán, chúng tôi yêu cầu quét hình ảnh một cách hiệu quả. Chúng ta sẽ tìm hiểu cách triển khai vòng quét hình ảnh hiệu quả bằng cách sử dụng con trỏ.

Ở đây chúng ta sẽ thấy quá trình quét pixel với một ví dụ về chiến lược giảm màu. Hình ảnh màu như hình ảnh RGB bao gồm 3 kênh. Mỗi kênh này có cùng số lượng pixel nhưng có giá trị tương ứng. Mỗi giá trị này là một giá trị ký tự không dấu 8 bit.

Do đó, tổng số màu có thể có là 256 x 256 x 256 =16,777,216. Chúng ta có thể chia giá trị của mỗi pixel cho khối lập phương có kích thước bằng nhau để giảm số lượng màu khổng lồ có thể có. Nếu chúng ta chia các giá trị bằng cách sử dụng hình khối 8 x 8 x 8 thì số màu có thể trở thành 32 x 32 x 32 =32.768 màu.

Khi số lượng màu giảm đi, hệ thống sẽ trở nên nhanh chóng. Để thực hiện việc giảm thiểu này, chúng ta cần phải quét từng pixel, đây là một công việc tốn nhiều thời gian. Đó là lý do tại sao chúng tôi cần một phương pháp quét hình ảnh hiệu quả.

Chương trình sau đây trình bày cách giảm màu bằng phương pháp con trỏ trong OpenCV.

Ví dụ

#include<iostream>
#include<opencv2/highgui/highgui.hpp>
using namespace cv;//Declaring cv namespace
using namespace std;//Declaring std namespace
void reducing_Color(Mat &image, int div=64){ //Declaring the function//
   int   total_rows = image.rows;//getting the number of lines//
   int total_columns = image.cols * image.channels();//getting the number of columns per line//
   for (int j = 0; j < total_rows; j++){ //initiating a for loop for rows
      uchar* data = image.ptr<uchar>(j);
      for (int i = 0; i < total_columns; i++){ //initiating a for loop for columns//
         data[i] = data[i] / div * div + div / 2;//processing the pixels//
      }
   }  
}
int main() {
   Mat image;//taking an image matrix//
   image = imread("grapes.jpg");//loading an image//
   namedWindow("Image Window");//Declaring another window//
   reducing_Color(image);//calling the function//
   imshow("Image Window", image);//showing the image with reduced color//
   waitKey(0);
   return 0;
}

Đầu ra

Làm thế nào để giảm màu bằng cách sử dụng Phương pháp con trỏ trong OpenCV?