2012-12-14 2 views
1

cv::MatfooImage 1000 * 1000 픽셀의 이미지가 CV_32F 형식입니다.OpenCV convertTo 느림

는 지금은 그냥이 라인의 5ms 정도 걸립니다, 나는 그러나

fooImage.convertTo(displayImage,CV_8UC1) 

를 사용하여 이미지를 표시하고 싶습니다. 이게 정상적인거야 ?? CV_32F 매트 이미지를 CV_8UC1으로 신속하게 변환하려면 어떻게해야합니까?

감사합니다.

+0

프로세서가 무엇입니까? – ArtemStorozhuk

+0

Intel Xeon CPU E5-2690 Windows 7 64 비트 – UserKiwi

+3

다른 형식으로 4 백만 바이트를 1 백만 바이트로 변환하는 데 5 밀리 초가 걸릴 때가 왔습니다. 느린 것으로 간주됩니다. 이 시간이 얼마나 걸릴 것으로 예상됩니까? 나는 OpenCV가 당신을 위해 너무 느릴 것으로 생각합니다. 또한 이러한 타이밍을 매우 정확하게 측정해야합니다. – mmgp

답변

2

소리가 느리지 만 convertTo()는 SSE2 나 다른 것을 사용하는 것이 특히 바람직하지 않습니다.

RAM에서 4MB, 1Mb 할당, 4Million 부동 소수점 연산을 수행하고 1Mb를 RAM에 다시 쓰므로 밀리 초가 부당하지 않습니다.

당신은 단순히 당신이 이미지를 표시 할 수있는 시간을 포함하고 있습니까

255.0로 각각의 값을 곱하여 자신 UCHAR에 이미지 데이터를 변환하는 간단한 루프를 쓸 수? 현재 8 비트 그레이 스케일 인 "displayImage"를 만들고 있습니다.이 이미지가 표시되면 RGB 또는 RGBA 이미지로 변환해야합니다.

+0

각 값에 255를 곱하는 것이 정확하지 않습니다. 당신은 확실히 424242.424242 * 255를 부호없는 바이트로 표현할 수 없습니다. – mmgp

+1

Martin은 값이 간격 [0.0f, 1.0f]에 있다고 가정합니다. 이는 부동 소수점 이미지가 규칙에 따라 저장되는 방법이기 때문입니다. –

+0

@ Martins Beckett에게 감사드립니다. 내 문제로 인해 문제가 해결되었지만 convertTo 문제는 아직 해결되지 않았습니다. 처음에는 이미지 만 표시하고 imshow 함수를 사용하면 CV_32F에있는 이미지가 255로 자동 조정되므로 CV_8UC1로 변환하려고합니다. 귀하의 의견을 바탕으로, 나는 모든 CV_32F 이미지를 255로 나눈 다음 imshow를 직접 사용하여 이미지를 표시 할 수 있습니다. 따라서 convertTo의 5ms가 저장됩니다. 그러나 아직도 나는 간단한 변환이 5ms가 걸리는 이유를 이해하지 못한다. – UserKiwi