您的位置:首页 > 其它

\tutorial_code\core\how_to_scan_images

2013-05-20 20:44 330 查看
我们将探索以下问题的答案:

如何遍历图像中的每一个像素?

OpenCV的矩阵值是如何存储的?

如何测试我们所实现算法的性能?

查找表是什么?为什么要用它?

没错啦!

LZ最感兴趣的一节哎。

毕竟以后自己做算法的时候,都会要用到

如何遍历图像中的每一个像素?

OpenCV的矩阵值是如何存储的?

如何测试我们所实现算法的性能?



等等,,还有这个呢

查找表是什么?为什么要用它?

查找表??为什么用??

看了你不就知道啦白痴1!!

【4】how_to_scan_images

OpenCV2.3.1\opencv\samples\cpp\tutorial_code\core\how_to_scan_images

做测试用的就是你们最喜欢吃的雪糕。。

三个圈。。~~



首先。。要学会怎么计时。。

没错,又是复制粘贴。

OpenCV提供了两个简便的可用于计时的函数 getTickCount() 和 getTickFrequency() 。第一个函数返回你的CPU自某个事件(如启动电脑)以来走过的时钟周期数,第二个函数返回你的CPU一秒钟所走的时钟周期数。这样,我们就能轻松地以秒为单位对某运算计时:

double t = (double)getTickCount();

// 做点什么 ...

t = ((double)getTickCount() - t)/getTickFrequency();

cout << "Times passed in seconds: " << t << endl;

下面就潜心跟着大师学吧。。没错,复制粘贴

连续存储有助于提升图像扫描速度,我们可以使用 isContinuous() 来去判断矩阵是否是连续存储的. 相关示例会在接下来的内容中提供。

1.高效的方法 Efficient Way

说到性能,经典的C风格运算符[](指针)访问要更胜一筹.

因此,我们推荐的效率最高的查找表赋值方法,还是下面的这种:

Mat& ScanImageAndReduceC(Mat& I, const uchar* const table)

{

// accept only char type matrices

CV_Assert(I.depth() != sizeof(uchar));

int channels = I.channels();

int nRows = I.rows * channels;

int nCols = I.cols;

if (I.isContinuous())

{

nCols *= nRows;

nRows = 1;

}

int i,j;

uchar* p;

for( i = 0; i < nRows; ++i)

{

p = I.ptr<uchar>(i);

for ( j = 0; j < nCols; ++j)

{

p[j] = table[p[j];

}

}

return I;

}

这里,我们获取了每一行开始处的指针,然后遍历至该行末尾。如果矩阵是以连续方式存储的,我们只需请求一次指针、然后一路遍历下去就行。彩色图像的情况有必要加以注意:因为三个通道的原因,我们需要遍历的元素数目也是3倍。

4. 核心函数LUT(The Core Function)

这是最被推荐的用于实现批量图像元素查找和更该操作图像方法。在图像处理中,对于一个给定的值,将其替换成其他的值是一个很常见的操作,OpenCV 提供里一个函数直接实现该操作,并不需要你自己扫描图像,就是:operationsOnArrays:LUT() <lut> ,一个包含于core module的函数.

首先我们建立一个mat型用于查表:

Mat lookUpTable(1, 256, CV_8U);

uchar* p = lookUpTable.data;

for( int i = 0; i < 256; ++i)

p[i] = table[i];

然后我们调用函数 (I 是输入 J 是输出):

LUT(I, lookUpTable, J);



LUT是什么怎么用的还是不明白 = =

请参阅:

OpenCV如何扫描图像、利用查找表和计时

http://www.opencv.org.cn/opencvdoc/2.3.2/html/doc/tutorials/core/how_to_scan_images/how_to_scan_images.html#howtoscanimagesopencv

举报
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: