image - Tkinter Canvas 不会在 c.create_image 上显示图像
问题描述
我有一个画布,我需要显示使用cv2
VideoCapture 拍摄的图像,因此我将其转换为:
img = Image.fromarray(img)
img = ImageTk.PhotoImage(master=window, image=img.resize((800, 600)))
但它只是没有显示。
我尝试将 photoImages master 更改为也不起作用的画布。
def cv2tk(img, window):
# fic the colors
b,g,r = cv2.split(img)
img = cv2.merge((r,g,b))
# turn img into tkphoto
img = Image.fromarray(img)
imgtk = ImageTk.PhotoImage(master=window, image=img.resize((800, 600), Image.ANTIALIAS))
# return img
return imgtk
window = Tk()
window.geometry("800x600")
c = Canvas(window, width=800, height=600)
c.grid(row=0, column=0)
vc = cv2.VideoCapture(0)
val, frame = vc.read()
img = convert.cv2tk(frame, window)
c.create_image(0, 0, image=img)
while True:
window.update()
我希望得到一个带有来自网络摄像头的图片的窗口,但实际上我得到了一个空白窗口。
请帮忙。
解决方案
回答可能有点晚了。但这是我正在使用的一个片段。
只要您按下Space图像,图像就会被捕获并存储在您的脚本所在的位置。同时,它也会被读取和显示canvas
。
import cv2
from tkinter import *
from PIL import Image, ImageOps
cam = cv2.VideoCapture(0)
cv2.namedWindow("Click Space or Escape")
canvas = Canvas(width=300, height=300, bg='black')
canvas.pack(expand=YES, fill=BOTH)
img_counter = 0
while True:
ret, frame = cam.read()
if not ret:
print("failed to grab frame")
break
cv2.imshow("Click Space or Escape", frame)
k = cv2.waitKey(1)
if k%256 == 27:
# Press Escape to Close
print("Escape Pressed .. Bye")
break
elif k%256 == 32:
# Press Space for Image Capture
img_name = "{}.png".format(img_counter)
cv2.imwrite(img_name, frame)
print("{} written!".format(img_name))
img_counter += 1
gif1 = PhotoImage(file=img_name)
gif1 = gif1.zoom(17)
gif1 = gif1.subsample(28)
canvas.create_image(10, 10, image=gif1, anchor=NW)
mainloop()
cam.release()
cv2.destroyAllWindows()
推荐阅读
- java - 如何在 Spring Boot aop @Around 函数中创建事务?
- node.js - 在 express.Router() 中存储路由;
- php - 当我发送太多请求时,它会失败,整个网站将停止工作
- node.js - 如何从 Kafka 中的特定偏移量获取数据?
- java - 在我尝试访问应用程序时在tomcat 8中成功部署角度js项目构建后,它没有显示空白页面
- javascript - HTML Canvas 的文本未显示在屏幕上
- angular - @azure/msal-angular 注销重定向到应用程序,但应用程序不显示
- ios - 有没有办法在 Swift 中反转动画?
- c - 如何通过串行打印浮点数?
- sql-server - T-SQL:创建存储过程以更新表中的列,其中表和字段作为参数