emguCV 호출 속도를 높이는 것에 대해 질문이 있습니다. 현재 저는 1920x1080 @ 30Hz로 카메라를 찍는 캡처 카드를 가지고 있습니다. 샘플 그래버로 directshow를 사용하여 각 프레임을 캡처하여 양식에 표시합니다. 이제 이미지 스태빌라이저를 작성했지만 가장 빨리 실행할 수있는 것은 약 20Hz입니다.emguCV 메소드 속도 향상
내 안정화 장치에서 가장 먼저하는 일은 1920x1080을 640x480으로 축소하여 피쳐 트랙을 훨씬 빠르게 만듭니다.
은 그럼 내가 사용에 대한 12-15ms 소요 goodFeaturesToTrack
previousFrameGray.GoodFeaturesToTrack(sampleSize, sampleQuality, minimumDistance, blockSize)[0]);
.
내가 할 다음 일은이
OpticalFlow.PyrLK(previousFrameGray, frame_gray, prev_corner.ToArray(), new Size(15, 15), 5, new MCvTermCriteria(5), out temp, out status, out err);
를 사용하여 광학 흐름을 계산하고 그 약 15-18ms 걸립니다.
내가 전화 방법을 소모 마지막으로이 약 10-12ms 걸리는 warpAffine 기능
Image<Bgr, byte> warped_frame = frame.WarpAffine(T, interpMethod, Emgu.CV.CvEnum.WARP.CV_WARP_DEFAULT, new Bgr(BackgroundColor));
입니다.
계산의 나머지 부분은 이미지 크기 조정과 총 약 7-8ms가 걸리지 않습니다.
따라서 프레임 계산을위한 총 시간은 약 48ms 또는 약 21Hz입니다.
어떻게 든 33ms 미만의 총 시간을 가져야합니다. 이제 내 질문에 대해.
첫 번째 : 내가 GPU를 사용하여 goodFeatures 및 opticalFlow로 전환하면 속도가 증가합니다.
두 번째 : 이러한 계산 속도를 높일 수있는 GPU를 사용하는 것 외에 다른 방법이 있습니까?
CPU 사용량은 얼마나됩니까? 두 개의 첫 번째 호출을 병렬로 수행 할 수 있습니다 (내부적으로 병렬이 아닌 경우). 더 나은 CPU/코어가 더 빨라집니다. –
저는 i7-3960X @ 4Ghz를 사용하며 52 %를 사용합니다. 그것은 또한 내 모든 코어를 사용하는 것 같습니다. – Axis