본문 바로가기
OpenCV

OpenCV ] 연산 시간 측정, TickMeter 클래스 또는 getTickCount() 와 getTickFrequency() 함수 사용

by eteo 2022. 8. 18.

 

 

TickMeter 클래스 사용

영상 반전에 걸리는 연산 시간을 측정

void time_inverse() {

	Mat src = imread("lenna.bmp", IMREAD_GRAYSCALE);

	if (src.empty()) {
		cerr << "Image load failed!" << endl;
		return;
	}

	Mat dst(src.rows, src.cols, src.type());

	
	TickMeter tm;	// 객체 생성
	tm.start();	// 측정 시작

	for (int j = 0; j < src.rows; j++) {
		for (int i = 0; i < src.cols; i++) {
			//dst.at<uchar>(j, i) = 255 - src.at<uchar>(j, i);	// 영상 반전
			dst.at<uchar>(j, i) = ~src.at<uchar>(j, i);
		}
	}
	
	tm.stop();	// 측정 종료

	// 측정 시간을 ms 단위로 반환
	cout << "Image inverse took " << tm.getTimeMilli() << "ms." << endl;
    
	// 디버그 모드로 빌드할 경우에는 디버깅을 위한 연산이 추가되기 때문에
    // 영상 처리만을 위한 정확한 연산 시간을 측정할 수 없음

    
}

 

 

 

getTickCount() 와 getTickFrequency() 함수 사용

getTickCount 와 GetTickCount() 는 다른 함수이다. (참고 : https://eteo.tistory.com/151)

 

getTickCount() 함수는 컴퓨터 부팅 시점부터 현재 까지 발생한 tick 횟수를 반환. 반환형은 int64

getTickFrequency() 함수는 시스템의 클락 주파수(초당 틱 횟수)를 반환. 반환형은 double

 

void time_inverse() {

	Mat src = imread("lenna.bmp", IMREAD_GRAYSCALE);

	if (src.empty()) {
		cerr << "Image load failed!" << endl;
		return;
	}

	Mat dst(src.rows, src.cols, src.type());

	int64 t1 = getTickCount();

	for (int j = 0; j < src.rows; j++) {
		for (int i = 0; i < src.cols; i++) {
			//dst.at<uchar>(j, i) = 255 - src.at<uchar>(j, i);
			dst.at<uchar>(j, i) = ~src.at<uchar>(j, i);
		}
	}
	
	int64 t2 = getTickCount();
	double ms = (t2 - t1) * 1000 / getTickFrequency();	// 주파수는 10MHz 반환, 밀리초로 환산

	cout << "Image inverse took " << ms << "ms." << endl;
    
}