参考书目:《OpenCV 2 计算机视觉编程手册_中文版》
————————————————————————————————————————————————————————————————
chapter02
// *data++= *data/div*div + div/2; 这个在QT上跑会出错,在VS没事。可改成
*data = *data / div*div + div / 2;
data += 1;
// 用模运算代替整数除法的 被除数整数倍数(总之也是缩小范围)
// 这个运算要存取像素的两次,所以比较慢
int v = *data;
//*data++ = v - v%div +div/2;
*data = v - v%div + div / 2;
data += 1;
// 这个我再QT得出的结果是错的,div=64。实际上是6,但我的QT里面确实5
int n = static_cast<int>(log(static_cast<double>(div)) / log(2.0));
// step是矩阵中行的长度,单位为字节,可以用step和这个指针相加即得这个点的下一行元素
data += step;
// 这里不用*data++,这样可以不改变data的指针所指地址。确保
*(data + i) = *(data+i)&mask + div / 2;
// 在contrast.cpp里面,少了itout++
for (; it != itend; it++, itup++, itdown++,itout++)
// 我还没想出来为什么是.step1()
int step = image.step1();
指针所指地址不变,所指内容可以变
// const uchar* previous = image.data;
// mask要是灰度图像
logo.copyTo(imageROI, mask);
// logo应该一定是灰度图,所以这里加上在channels.at(1),那么logo就是蓝色的
imageROI = channels.at(1);