현재 17 개의 이미지 (24 비트, 1200 x 1600)를 읽습니다. 17 이미지를 읽는 데 약 .078 초 비용 그러나 나는 내 laplacian edge_detection을 수행하는 192000의 흑백 이미지 크기로 5760000의 크기 인이 메모리 블록을 변환하고 싶습니다. 지금은 다음과 같은 방법을 사용하고 있습니다 : 그러나 PChar는 메모리 블록을 읽고 나에게 17 개 이미지를 읽을 수 2.262 초 총 시간을 비용입니다 1920000의 벡터 크기로 작성프로그램 속도 향상 : 벡터 속도, 메모리 블록 속도
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;
}
이 과정을. 이 방법에 접근 할 수있는 더 빠른 방법이 있습니까?
내가 아래 다른 코드를 사용하여 시도했지만 pChar2 그것이 VS2010에 대한 디버그 모드에 badptr을 가지고 있음을 말해 계속해서 :
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;
(data_grey이를 PChar는 pChar2 변수는 서명되지 않은 숯불 *입니다) 내 생각은 내가 잘못된 방식으로 pChar2 메모리 블록에 쓸 수 있습니다. 하지만이 두 번째 방법은 훨씬 빠르므로 어떻게 수정해야하는지 궁금합니다. images.at (i) .data_grey에 흑백 메모리 블록이 있다면 이상적입니다. 나는 주로 벡터보다 훨씬 빠르기 때문에 이것을하고 싶다. 그러나 벡터 기반 코드에 비해 내가 그렇게 느리게 만든다. (나는 개인적으로 사용하기 쉽게 벡터를 찾을 난 정말 심하게 속도를 필요로하는 경우가 빠를 것으로 예상되는 경우, 그래서 난 메모리 블록 작업을 처리합니다)
예 tat이 내 의도였습니다. Thys – user2427671