【opencv练习06-Scan图像の三种方法】
2016-08-25 23:40
295 查看
//方法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 三种图像遍历方法
- OPENCV2 访问图像像素值的三种方法
- opencv学习笔记之对灰度图像遍历的三种方法
- opencv学习笔记之对灰度图像遍历的三种方法
- opencv之访问图像像素的 三种方法
- OpenCV 三种图像遍历方法
- opencv开发笔记(七):三种方法遍历图像操作像素
- Opencv访问图像像素的三种方法
- OPENCV2 访问图像像素值的三种方法
- OpenCV图像显示在VC对话框中的方法
- opencv OpenCV访问图像像素, 数组元素等方法收集
- OPENCV霍夫变换使用方法——边缘检测+霍夫变换求出图像中的直线
- worpress实现特色图像的三种方法
- 【OpenCV学习笔记】之四:二值图像细化方法/骨架提取----基于2.0 Mat接口
- OpenCV改变图像大小的操作,resize与图像金字塔方法
- 利用MFC和opencv读取视频显示图像方法
- opencv中图像一种相似性度量方法-------EMD
- opencv练习:将两幅同样大小的图像想减并显示结果
- OpenCV访问图像像素的方法收集以及自己实践中得体会
- MFC+OpenCV 利用Show方法使图像不拉伸显示在Picture控件上