我目前正在阅读17张图片(24位,1200 x 1600)。读17张图像花了我大约0.078秒但是,我想将这个5760000大小的内存块转换为192000的黑白图像大小来做我的laplacian edge_detection。现在,我使用下面的方法:提高程序速度:矢量速度,内存块速度
images.resize(rows * cols);
images.reserve(rows * cols);
for(int z = 0; z < rows * cols; z ++){
pix.blue = (int) *(pChar + z * 3);
pix.green = (int) *(pChar + z * 3 + 1);
pix.red = (int) *(pChar + z * 3 + 2);
pix.black_white = pix.blue * .11 + pix.green * .59 + pix.red *.3;
images.at(z).black_white = pix.blue * .11 + pix.green * .59 + pix.red *.3;
}
然而,这读取PCHAR内存块和写入的192万矢量大小花费我的2.262秒总时间,读取17倍的图像处理。有没有更快的方法可以处理这个问题?
我曾尝试使用以下不同的代码尝试,但在pChar2不断告诉我,它在调试模式VS2010一个badptr:(data_grey,PCHAR,pChar2变量是一个无符号的char *)
pChar = (unsigned char*) malloc (sizeof(char)*3*rows*cols);
pChar2 = (unsigned char*) malloc (sizeof(char) * rows * cols);
fread(pChar, sizeof(char), 3*rows*cols, bmpInput);
images.at(i).data = pChar;
for(int z = 0; z < rows * cols; z ++){
pix.blue = (int) *(pChar + z * 3);
pix.green = (int) *(pChar + z * 3 + 1);
pix.red = (int) *(pChar + z * 3 + 2);
pix.black_white = pix.blue * .11 + pix.green * .59 + pix.red *.3;
pChar2 += (unsigned char) pix.black_white;
}
images.at(i).data_grey = pChar2;
我的想法是,我可能以不正确的方式写入pChar2内存块。但这第二种方法要快得多,所以我想知道我应该如何解决它。如果我为images.at(i).data_grey获得了一块黑白内存块,那将是理想的选择。我主要是想这样做,因为它比矢量快得多,但是在基于矢量的代码中,我做了一些错误,使得它比较慢? (我个人觉得载体更容易使用,但如果我需要的速度实在太差了,所以我会处理与存储块的工作,如果它应该是更快)
是的,我的意图是。 Thxs – user2427671