C++版openCV的waitKey(0)失效的解决办法

问题描述

今天遇到了一个问题,使用opencv读取一张图像并显示,Build然后F5。不知未何,图像窗口一闪而过。明明加上了waitKey(0)呀,至少应该等我按键才会结束的嘛,Ctrl + F5依然不行。为何会这样?

环境配置

1
2
3
windows10
visual studio 2015
openCV3.3.1

测试代码

1
2
3
4
5
6
7
8
#include<opencv2\opencv.hpp>
using namespace cv;
int main() {
Mat image = imread("c:\\users\\like\\pictures\\图片2.tif");
imshow("original", image);
waitKey(0);
return 0;
}

解决办法

按照autocyz的文章:opencv中waitkey(0)不起作用,加上system(“pause”)也没有解决问题。窗口没有消失,也没有显示图像内容。但是图像弹窗的标题是乱码的,命令行提示size<0,推测可能是代码文件的编码方式有问题导致没有找到图像,不是utf-8,不属于编译器默认的文件编码格式。

使用notepad++打开test.cpp,点击菜单中【编码】,发现该文件的编码方式是【UTF-8无BOM格式编码】,点击下面的【UTF-8格式编码】,即刻修改为正常的utf-8的格式。可能代码中的中文需要重新输入才能解决问题。

python中可能出现的问题

抛开代码格式问题不谈,opencv显示图像的窗口可能卡死,这是因为没有加上waitKey()导致的。

StackOverflow上也有人发布了waitKey不起作用的问题:Opencv python. WaitKey don’t respond?

1
2
3
4
5
6
import cv2

img = cv2.imread('347620923614738322_233985812.jpg')
cv2.namedWindow("window")
cv2.imshow("window", img)
cv2.waitKey(0)

给出的解决方案是加上destoryAllWindows()

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
# -*- coding: utf-8 -*-

# Objectif : découvrir le fonctionnement d'opencv-python
# http://opencv-python-tutroals.readthedocs.org/en/latest/index.html


import numpy as np
import cv2

# Load an color image in grayscale
img = cv2.imread('Lena.tiff',0)
WINDOW_NAME = 'Image de Lena'
cv2.namedWindow(WINDOW_NAME, cv2.CV_WINDOW_AUTOSIZE)
cv2.startWindowThread()

# Display an image
cv2.imshow(WINDOW_NAME,img)
cv2.waitKey(0)

cv2.destroyAllWindows()