2013-11-24 12 views
2

로봇 카메라의 스트리밍 이미지에서 Canny Detection을 사용하고 있습니다 (원 찾기). 가장자리 사이의 최대 콘트라스트를 얻으려면 RGB 이미지를 별도의 채널로 분할하고 각각에 Canny를 수행 한 다음 비트 단위로 또는 가장자리를 병합 된 이미지로 결합하십시오. 간단한 이미지에서 사용하면 내 fps는 30fps에서 비교적 영향을받지 않습니다. 카메라가 더 복잡한 이미지를 볼 때 fps는 24fps로 떨어집니다. 이게 정상인가? 그렇다면 어쨌든 속도를 높여 일정한 프레임 속도로 계속 실행할 수 있습니까? 실제로,더 복잡한 이미지에서 OpenCV의 Canny Detection 속도가 느림

vector<Mat> rgb; 
split(src, rgb); 

Canny(rgb[0], rgb[0], cannyThreshold, cannyThreshold2, 3); 
Canny(rgb[1], rgb[1], cannyThreshold, cannyThreshold2, 3); 
Canny(rgb[2], rgb[2], cannyThreshold, cannyThreshold2, 3); 

Mat mergedImage; 
bitwise_or(rgb[0], rgb[1], mergedImage); 
bitwise_or(mergedImage, rgb[2], mergedImage); 
+0

의미가 있습니다. bitwise_or는 아마 양수 값이있는 이미지 위치만을보고 있기 때문입니다. 양수 값이 더 많으면 더 오래 걸립니다. –

답변

2

그 행동이 예상된다

여기 내가 사용하는 코드입니다. 하나가 있다면 당신은 Intel IPP를 설치할 수

  • OpenCV can benefit from an Intel processor :

    이 일을 속도를 3 가지 방법이 있습니다. 이 기능을 사용하려면 OpenCV를 직접 컴파일해야 할 수도 있습니다.

  • OpenCV의 GPU 모듈을 사용하십시오. gpu::Canny() 메서드는 GPU에서 실행되는 Canny의 구현을 제공합니다. OpenCV는 비디오 카드가 CUDA 또는 OpenCL을 지원하는 경우 GPU에서 특정 알고리즘을 실행할 수 있습니다. 이 기능을 사용하려면 OpenCV를 직접 컴파일해야 할 수도 있습니다.

  • 다른 접근 방식을 조사하십시오. 때로는 다른 세트의 알고리즘이 더 짧은 시간에 동일한 결과를 얻을 수 있습니다. I talked briefly about this on your other question.

+0

색상에 대한 멋진 방법을 수행하는 방법을 알고 있습니까? 이 전술에 대한 여러 논문을 읽었지만 OpenCV에서 실제 구현을 보지 못했습니다. –

+0

해결 방법은 수행중인 것처럼 이미지의 각 개별 채널 (R, G, B)에서 Canny를 실행하는 것입니다. – karlphillip