如何在 OpenCV 中使用迭代器方法减轻色彩?
OpenCV 有与 C++ STL 兼容的“Mat 迭代器”类。使用此“Mat 迭代器”类,我们可以非常容易地访问像素。我们必须创建一个“Mat 迭代器”类的对象。我们可以将其作为“Mat_<Vec3b>: : 迭代器示例”来实现。我们必须在“Mat”之后使用下划线,例如“Mat_”,因为它是一种模板方法。在此方法中,必须在创建“迭代器”类的对象时指定返回类型。这就是我们声明数据类型 <Vec3b> 的原因。
以下程序演示如何在 OpenCV 中使用迭代器方法减轻色彩。
示例
#include<iostream> #include<opencv2/highgui/highgui.hpp> using namespace std;//Declaring std namespace using namespace cv;//Declaring cv namespace void reducing_Color(Mat& image, int div = 64){ //Declaring the function// Mat_<Vec3b>::iterator iterator_start;//Declaring starting iterator// iterator_start = image.begin<Vec3b>();//Obtain iterator at initial position// Mat_<Vec3b>::iterator iterator_end;//Declaring ending iterator// iterator_end = image.end<Vec3b>();//Obtain iterator an end position// for (; iterator_start != iterator_end; iterator_start++){ //Loop for all pixels// (*iterator_start)[0] = (*iterator_start)[0] / div * div + div / 2;//Process pixels of first channel// (*iterator_start)[1] = (*iterator_start)[1] / div * div + div / 2;//Process pixels of second channel// (*iterator_start)[2] = (*iterator_start)[2] / div * div + div / 2;//Process pixels of third channel// } } int main() { Mat image;//taking an image matrix// image = imread("mango.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; }
输出
广告