码迷,mamicode.com
首页 > 其他好文 > 详细

OpenCV——颜色缩减、计时函数、访问像素

时间:2018-09-15 17:35:30      阅读:199      评论:0      收藏:0      [点我收藏+]

标签:技术   函数   ble   har   space   颜色   ati   inf   style   

技术分享图片

技术分享图片

技术分享图片

 

 

 1 //颜色空间缩减
 2 //src:源图片
 3 //dst:目标图片
 4 //divideWith:缩减宽度
 5 void ColorSpaceReduction(Mat src,int divideWith,Mat& dst)
 6 {
 7     //创建查询用的表
 8     uchar table[256];
 9     for (int i = 0; i < 256; ++i)
10         table[i] = divideWith * (i / divideWith);
11     //创建mat型用于LUT函数查表
12     Mat lookUpTable(1, 256, CV_8U);
13     uchar* p = lookUpTable.data;
14     for (int i = 0; i < 256; ++i)
15         p[i] = table[i];
16     //src是输入dst是输出
17     LUT(src, lookUpTable, dst);
18 
19 }

技术分享图片

1 double time0 = static_cast<double>(getTickCount());//记录起始时间
2 
3 time0 = ((double)getTickCount() - time0) / getTickFrequency();
4 cout << "运行时间为 "<< time0 << ""<<endl;//输出运行时间

 

访问像素的三种方法

【方法1】指针访问,c语言操作符[ ](速度最快,但有越界的风险)

 1     int rowNumber = dst.rows;//行数
 2     int colNumber = dst.cols*dst.channels();//列数*通道数=每一行的元素个数
 3 
 4     //循环遍历每个元素
 5     for (int i = 0; i < rowNumber; i++)//行循环
 6     {
 7         uchar* data = dst.ptr<uchar>(i);//获取第i行首地址
 8         for (int j=0; j < colNumber; j++)//列循环
 9             data[j] = data[j] / div* div+div/2;//颜色缩减操作
    //也可以写成 *data++=*data/div*div+div/2;
10 }

【方法2】迭代器iterator(绝对安全,不会越界)

技术分享图片

1     Mat_<Vec3b>::iterator it = dst.begin<Vec3b>();//初始位置的迭代器
2     Mat_<Vec3b>::iterator itend = dst.end<Vec3b>();//终止位置的迭代器
3     //彩色图像每个像素有3个通道
4     for (; it != itend; ++it)
5     {
6         (*it)[0] = (*it)[0] / div * div + div / 2;
7         (*it)[1] = (*it)[1] / div * div + div / 2;
8         (*it)[2] = (*it)[2] / div * div + div / 2;
9     }

 

【方法1】动态地址计算(最慢)

 

 1     int rowNumber = dst.rows;//行数
 2     int colNumber = dst.cols;//列数
 3     for (int i = 0; i < rowNumber; i++)
 4     {
 5         for (int j = 0; j < colNumber; j++)
 6         {
 7             //彩色图像每个像素有3个通道
 8             dst.at<Vec3b>(i, j)[0] = dst.at<Vec3b>(i, j)[0] / div * div + div / 2;
 9             dst.at<Vec3b>(i, j)[1] = dst.at<Vec3b>(i, j)[1] / div * div + div / 2;
10             dst.at<Vec3b>(i, j)[2] = dst.at<Vec3b>(i, j)[2] / div * div + div / 2;
11         
12         }
13     }

 

技术分享图片

 

OpenCV——颜色缩减、计时函数、访问像素

标签:技术   函数   ble   har   space   颜色   ati   inf   style   

原文地址:https://www.cnblogs.com/long5683/p/9651442.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!