问题描述
今天遇到了一个问题,使用opencv读取一张图像并显示,Build然后F5。不知未何,图像窗口一闪而过。明明加上了waitKey(0)呀,至少应该等我按键才会结束的嘛,Ctrl + F5依然不行。为何会这样?
环境配置1
2
3windows10
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 | import cv2 |
给出的解决方案是加上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()