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

问题描述

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

#include
using namespace cv;
int main() {
    Mat image = imread("c:\\users\\like\\pictures\\图片2.tif");
    imshow("original", image);
    waitKey(0);
    return 0;
}

更新解决办法

今天同样的问题再次出现了,并且比上次来的更加凶猛,原来是根本问题没有解决!

在StackOverflow上提问, 得到大神指点。发现是我的环境配置有问题。

虽然更新之前说的文件编码是错误的,导致文件找不到的问题。但现在看来,这不是主要问题,主要问题是配置问题。

C++版openCV waitKey(0)失效的解决办法_第1张图片

This problem is due to wrong linking settings:

  • In Debug, you need to link only to the debug library opencv_world331d.lib
  • In Release, you need to link only to the release library opencv_world331.lib

现在去更新之前写的opencv配置的博客:openCV3.X+VS2015+Windows10环境配置详解

解决办法

按照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?

import cv2

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

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

# -*- 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()

你可能感兴趣的:(openCV,C++,opencv,C++,waitKey)