OpenCV-waitKey()


學習仿射變換時用到waitKey()實現圖片旋轉顯示


waitKey(30)

for(;;){
if (waitKey(30) >= 0)//返回30ms內按下的鍵值,否則返回-1.
break;
}

其中()內的值表示等待時間(ms),如代碼中表示等待30ms,waitKey(30)返回值為30ms內鍵盤按下的返回值(鍵盤中每個按鍵對應一個ASCII碼,見https://www.cnblogs.com/yiven/p/7118056.html)
如果沒有按鍵按下,則返回-1,所以不會跳出循環

waitKey(0)

表示一直等待用戶按鍵事件發生

 int main()
{
	Mat src = imread("lyj.png");
	imshow("this is 林宥嘉",src);
	Point2f srcTri[] = {
		Point2f(0,0),
		Point2f(src.cols - 1,0),
		Point2f(0,src.rows - 1),
	};
	Point2f dstTri[] = {
		Point2f(0,src.rows*0.33f),
		Point2f(src.cols*0.85f,src.rows*0.25f),
		Point2f(src.cols*0.15f,src.rows*0.9f),	
	};
	//compute affine matrix
	Mat warp_mat = getAffineTransform(srcTri, dstTri);
	Mat dst, dst2;
	warpAffine(src, dst, warp_mat, src.size(), INTER_LINEAR, BORDER_CONSTANT, Scalar());
	for (int i = 0; i < 3; i++)
		circle(dst, dstTri[i], 5, Scalar(255, 0, 255), -1, 16);
	imshow("Affine Transform Test", dst);
     waitKey(0);
	//Rotation
	for (int frame = 0;; ++frame) {
	Point2f	 center=Point2f(src.cols*0.5f, src.rows*0.5f);
		double angle = frame * 3 % 360, scale = (cos((angle - 60)*PI / 180) + 1.05)*0.8;
		Mat rot_mat = getRotationMatrix2D(center, angle, scale);
		warpAffine(src, dst2, rot_mat, src.size(), INTER_LINEAR, BORDER_CONSTANT, Scalar());
		imshow("Affine Transform Test2", dst2);
		if (waitKey(30) >= 0)//返回30ms內按下的鍵值,否則返回-1.
			break;

	}
	return 0;
}


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM