ในการประมวลผลภาพ เราทำการคำนวณบนภาพ เพื่อความเฉพาะเจาะจงมากขึ้น เราทำการคำนวณพิกเซล ดังนั้นยิ่งจำนวนพิกเซลสูงเท่าใด การคำนวณก็จะยิ่งเสียเวลามากขึ้นเท่านั้น เพื่อลดเวลาในการคำนวณ เราจำเป็นต้องสแกนภาพอย่างมีประสิทธิภาพ เราจะได้เรียนรู้วิธีใช้การวนรอบการสแกนรูปภาพอย่างมีประสิทธิภาพโดยใช้พอยน์เตอร์
ที่นี่ เราจะเห็นกระบวนการสแกนพิกเซลพร้อมตัวอย่างกลยุทธ์การลดสี ภาพสี เช่น ภาพ 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; }
ผลลัพธ์