本文主要是介绍【opencv练习06-Scan图像の三种方法】,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!
//方法1【高效方式】*****************************************//压缩颜色值uchar* p;for( int i = 0; i < nRows; ++i) //指针每一行{p = I.ptr<uchar>(i); //p指向,第i行的地址for( int j = 0; j < nCols; ++j){p[j] = table[p[j]]; //修改i行的j元素颜色值}}return I;//方法2【安全方式,迭代器】*****************************************
**单通道——uchar
三通道——Vec3b**switch(channels) (http://img.blog.csdn.net/20160825234022144) {case 1:{for(int i=0; i<I.rows; ++i )for(int j=0; j< I.cols; ++j)I.at<uchar>(i,j) = table[I.at<uchar>(i,j)];break;}case 3:{Mat_<Vec3b> _I = I;for(int i=0; i<I.rows; ++i )for(int j=0; j< I.cols; ++j){_I(i,j)[0] = table[_I(i,j)[0]];_I(i,j)[1] = table[_I(i,j)[1]];_I(i,j)[2] = table[_I(i,j)[2]];} I = _I;break;}}return I;//方法3【动态地址计算】*****************************************switch(channels) {case 1:{MatIterator_<uchar> it,end;
for( it = I.begin<uchar>(), end = I.end<uchar>(); it != end; ++it)//初始化,条件++ *it = table[*it]; //迭代器访问break;}case 3:{MatIterator_<Vec3b> it,end;for( it = I.begin<Vec3b>(), end = I.end<Vec3b>(); it != end; ++it){(*it)[0] = table[(*it)[0]];(*it)[1] = table[(*it)[1]];(*it)[2] = table[(*it)[2]];}}}return I;//方法4【库实现】*****************************************Mat lookUpTable(1, 256, CV_8U);uchar* p = lookUpTable.data;for(int i = 0; i < 256; ++i)p[i] = table[i];Mat out_image4 = image.clone(); LUT(image, lookUpTable,out_image4);
这篇关于【opencv练习06-Scan图像の三种方法】的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!