在上一次中的最后,提到了修改图像数据的操作。但是,这种操作是比较慢的。下面说一下访问图像数据的几种方式。毕竟在实际的图像处理中,时刻少不了要自己写算法,这就必须访问图像数据,而快的访问方式可以大大提高效率。下面的例子中,还以修改图像数据为例。这些例子中,都通过用255减去原像素值来修改图像数据。其实这种操作就是反色操作。
例9-1 第一种修改方式,使用at访问修改像素值,这就是上次的例8,现在加上处理时间放在这里。
#include#includeusingnamespace cv;usingnamespace std; int main(intargc, char** argv){
Mat src = imread("E:/1.jpg", 1); Mat modifyImg = Mat(src.size(), src.type());//新建一个与src大小、类型相同的空白图像 namedWindow("例9_1原图", 0); imshow("例9_1原图", src); double time0 = static_cast<double>(getTickCount()); int height = src.rows;//图片的高度 int width = src.cols;//图片的宽度 for (int i = 0; i {
for (int j = 0; j {
modifyImg.at(i, j)[0] = 255 - src.at(i,j)[0]; modifyImg.at(i, j)[1] = 255 - src.at(i,j)[1]; modifyImg.at(i, j)[2] = 255 - src.at(i,j)[2]; } } time0 = ((double)getTickCount() - time0) / getTickFrequency(); cout <<"使用at的运行时间为:"<"秒"<endl; namedWindow("例9_1修改图", 0); imshow("例9_1修改图", modifyImg);