Computer >> คอมพิวเตอร์ >  >> การเขียนโปรแกรม >> C++

จะลดสีโดยใช้ Pointer Method ใน OpenCV ได้อย่างไร?


ในการประมวลผลภาพ เราทำการคำนวณบนภาพ เพื่อความเฉพาะเจาะจงมากขึ้น เราทำการคำนวณพิกเซล ดังนั้นยิ่งจำนวนพิกเซลสูงเท่าใด การคำนวณก็จะยิ่งเสียเวลามากขึ้นเท่านั้น เพื่อลดเวลาในการคำนวณ เราจำเป็นต้องสแกนภาพอย่างมีประสิทธิภาพ เราจะได้เรียนรู้วิธีใช้การวนรอบการสแกนรูปภาพอย่างมีประสิทธิภาพโดยใช้พอยน์เตอร์

ที่นี่ เราจะเห็นกระบวนการสแกนพิกเซลพร้อมตัวอย่างกลยุทธ์การลดสี ภาพสี เช่น ภาพ RGB ประกอบด้วย 3 ช่องสัญญาณ แต่ละช่องเหล่านี้มีจำนวนพิกเซลเท่ากันแต่มีค่าที่สอดคล้องกัน แต่ละค่านี้เป็นค่าถ่าน 8 บิตที่ไม่ได้ลงนาม

ดังนั้น จำนวนสีทั้งหมดที่เป็นไปได้คือ 256 x 256 x 256 =16,777,216 เราสามารถแบ่งค่าของแต่ละพิกเซลด้วยลูกบาศก์ที่มีขนาดเท่ากันเพื่อลดจำนวนสีที่เป็นไปได้ หากเราแบ่งค่าโดยใช้ 8 x 8 x 8 ลูกบาศก์ จำนวนสีที่เป็นไปได้จะกลายเป็น 32 x 32 x 32 =32,768 สี

เมื่อจำนวนสีลดลง ระบบจะทำงานอย่างรวดเร็ว ในการดำเนินการลดนี้ เราจำเป็นต้องสแกนแต่ละพิกเซล ซึ่งเป็นงานที่ต้องใช้เวลามาก เราจึงต้องการวิธีการสแกนภาพที่มีประสิทธิภาพ

โปรแกรมต่อไปนี้สาธิตวิธีลดสีโดยใช้วิธีตัวชี้ใน OpenCV

ตัวอย่าง

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

ผลลัพธ์

จะลดสีโดยใช้ Pointer Method ใน OpenCV ได้อย่างไร?