我想处理箭头键。但是当我打印出waitKey()函数的输入值时,它的0。 我不知道为什么。 我试着改变" int"到" char" ,但它不起作用。 我该如何解决这个问题。
int pos = 100;
imshow("image", image);
onChange(pos, (void *)&image);
createTrackbar("threshold", "image", &pos, 255, onChange, (void*)&image);
while (1) {
int Key = waitKey();
cout << Key << endl;
if (Key == 27) break;
if (Key == 2490368) {
pos--;
onChange(pos, (void *)&image);
}
if(Key == 2621440){
pos++;
onChange(pos, (void *)&image);
}
if (pos < 0 || pos > 255) pos = 0;
}
答案 0 :(得分:12)
请改用waitKeyEx()
功能。正如文档所说:
与waitKey()类似,但返回完整的密钥代码。
密钥代码是特定于实现的,取决于使用的后端: QT / GTK / Win32的
在我的系统上它给出: 左:2424832 上:2490368 右:2555904 下:2621440
虽然有许多在线消息来源称waitKey()
使用箭头,但它并没有在我的Windows系统上返回正确的密钥代码(总是返回0)。猜猜这也是特定于实现的。也许是因为waitKey()
会返回ASCII代码,但是箭头键没有它们(如here所述)。
答案 1 :(得分:2)
请注意,这取决于版本,在具有3.0 waitKey()的窗口上给出了完整的密钥代码,但是当我更改为3.3时,它突然返回0表示箭头键。
答案 2 :(得分:0)
以下是我的临时解决方法
#ifndef _WIN32
int myWaitKey(int wait) {
int c = cv::waitKey(wait);
return c;
}
#pragma message("linux..")
#else
#include <conio.h> // to support _getch
int myWaitKey(int wait) {
int c = cvWaitKey(wait);
if (c == 0) {
int c = _getch(); //capture the key code and insert into c
if (c == 0 || c == 224)
c = _getch();
}
//if (c!=-1) printf("%d\n",c);
return c;
}
#endif
答案 3 :(得分:0)
在代码中使用waitkey(),保持按住cv2.trackbar图标的左键单击并使用箭头键以1的增量移动