python - 如何在python openCV的窗口上显示图像结果

标签 python opencv

我打算显示每对图像之间的光流结果和差异图像,但是即使我看到图像已正确写入,图像窗口也始终显示最后一对的结果。
cv2.imshow('flow',bgr)
cv2.imshow('diff',diff)
有人可以阐明这一点,谢谢!

import numpy as np   
import cv2


dirOC = 'ImgDir_OriC\\'
dirTC = 'ImgDir_TransC\\'
suffix = '.bmp'
fCount = 11
count = 0
MAX = 10
while(count < MAX ):
    fNameO = dirOC + str(fCount) + suffix
    fNameT = dirTC + str(fCount) + suffix
    print fNameO
    print fNameT

    imgO = cv2.imread(fNameO, cv2.IMREAD_COLOR)
    prvs = cv2.cvtColor(imgO,cv2.COLOR_BGR2GRAY)

    imgT = cv2.imread(fNameT, cv2.IMREAD_COLOR)
    next = cv2.cvtColor(imgT,cv2.COLOR_BGR2GRAY)   

    flow = cv2.calcOpticalFlowFarneback(prvs,next, 0.5,3,15,15,3,5,1)
    mag, ang = cv2.cartToPolar(flow[...,0], flow[...,1])    

    hsv = np.zeros_like(imgO)    
    hsv[...,1] = 255
    hsv[...,0] = ang*180/np.pi/2     
    hsv[...,2] = cv2.normalize(mag,None,0,255,cv2.NORM_MINMAX)           
    bgr = cv2.cvtColor(hsv,cv2.COLOR_HSV2BGR)
    cv2.imshow('flow',bgr)

    diff = np.zeros_like(prvs)    
    cv2.subtract(prvs,next,diff)
    cv2.imshow('diff',diff)

    cv2.imwrite('flow'+str(fCount) + '.png',bgr)    
    cv2.imwrite('diff'+str(fCount) + '.png',diff)

    fCount = fCount +1
    count = count +1    


cv2.waitKey(0)
cv2.destroyAllWindows()

最佳答案

您需要将waitKey()放入while循环中:

import numpy as np   
import cv2

dirOC = 'ImgDir_OriC\\'
dirTC = 'ImgDir_TransC\\'
suffix = '.bmp'
fCount = 11
count = 0
MAX = 10
while(count < MAX ):
    fNameO = dirOC + str(fCount) + suffix
    fNameT = dirTC + str(fCount) + suffix
    print fNameO
    print fNameT

    imgO = cv2.imread(fNameO, cv2.IMREAD_COLOR)
    prvs = cv2.cvtColor(imgO,cv2.COLOR_BGR2GRAY)

    imgT = cv2.imread(fNameT, cv2.IMREAD_COLOR)
    next = cv2.cvtColor(imgT,cv2.COLOR_BGR2GRAY)   

    flow = cv2.calcOpticalFlowFarneback(prvs,next, 0.5,3,15,15,3,5,1)
    mag, ang = cv2.cartToPolar(flow[...,0], flow[...,1])    

    hsv = np.zeros_like(imgO)    
    hsv[...,1] = 255
    hsv[...,0] = ang*180/np.pi/2     
    hsv[...,2] = cv2.normalize(mag,None,0,255,cv2.NORM_MINMAX)           
    bgr = cv2.cvtColor(hsv,cv2.COLOR_HSV2BGR)
    cv2.imshow('flow',bgr)

    diff = np.zeros_like(prvs)    
    cv2.subtract(prvs,next,diff)
    cv2.imshow('diff',diff)

    cv2.imwrite('flow'+str(fCount) + '.png',bgr)    
    cv2.imwrite('diff'+str(fCount) + '.png',diff)

    fCount = fCount +1
    count = count +1    

    cv2.waitKey(0) # <<<<<<< inside the while loop

cv2.destroyAllWindows()

关于python - 如何在python openCV的窗口上显示图像结果,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/37896999/

相关文章:

android - OpenCv C++ 裁剪图像

python - 如何在 PyCharm 中制作部分

javascript - 在 python 中关闭。我可以关闭函数的局部上下文吗?

python - 导入 zbar 会导致 python 以退出代码 139 退出 - 在运行 10.9 的 mac 上可能导致这种情况的原因是什么?

c++ - openCV 报错

algorithm - 2d/3d 中两条线段的平均距离

python - 想要在 django 模板中显示单词的第一个字符

python - 为什么我可以在测试中访问 c​​ollections.abc,但不能在生产中访问?

python - Python 3.6调用C++扩展导入报错 "undefined symbol: _ZNK9FastNoise8GetNoiseEff"

通过 SSH 运行的 Python OpenCV 脚本(请求失败的 X 错误 : BadRequest)