Opencv读取视频和打开摄像头

VS2010+Opencv2.4.6
#include "stdafx.h"
#include "cv.h"
#include "highgui.h"
#include "cxcore.h"

int main(int argc, char* argv[])
{
	cvNamedWindow("avi");

//	CvCapture * capture=cvCreateFileCapture("E:\\Media\\1.avi");

	CvCapture * capture=cvCreateCameraCapture(-1);

	if(capture==NULL)
	{
		printf("加载文件失败!\n");
		return 0;
	}

	IplImage* frame=NULL;

	while(1)
	{
		frame=cvQueryFrame(capture);
		if(!frame)
		{
			break;
		}
		cvShowImage("avi",frame);
		char c=cvWaitKey(33);
		if(c==27)
		{
			break;
		}
	}
	cvReleaseCapture(&capture);
	cvDestroyWindow("avi");
	return 0;
}


  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
要在Tkinter中显示使用OpenCV读取的四个摄像头图像,您可以结合使用`threading`模块和`PIL`(Python Imaging Library)库。下面是一个示例代码: ```python import cv2 import threading from PIL import Image, ImageTk import tkinter as tk # 摄像头索引号,根据实际情况调整 camera_indexes = [0, 1, 2, 3] num_cameras = len(camera_indexes) # 存储每个摄像头的图像 frames = [None] * num_cameras # 创建摄像头对象 cameras = [cv2.VideoCapture(index) for index in camera_indexes] # 检查摄像头是否打开成功 for camera in cameras: if not camera.isOpened(): print(f"无法打开摄像头 {camera_indexes[cameras.index(camera)]}") exit() # 创建Tkinter窗口 window = tk.Tk() window.title("Camera Feed") # 创建用于显示图像的Label控件 image_labels = [] for i in range(num_cameras): label = tk.Label(window) label.pack(side=tk.LEFT) image_labels.append(label) # 多线程读取图像函数 def read_frames(camera_index): while True: ret, frame = cameras[camera_index].read() frame_rgb = cv2.cvtColor(frame, cv2.COLOR_BGR2RGB) image = Image.fromarray(frame_rgb) image_tk = ImageTk.PhotoImage(image) frames[camera_index] = image_tk # 创建并启动多个线程 threads = [] for i in range(num_cameras): thread = threading.Thread(target=read_frames, args=(i,)) thread.start() threads.append(thread) # 更新图像显示 def update_image_labels(): for i in range(num_cameras): image_label = image_labels[i] image_label.config(image=frames[i]) image_label.image = frames[i] window.after(10, update_image_labels) # 启动更新图像显示的函数 window.after(10, update_image_labels) # 运行Tkinter主循环 window.mainloop() # 等待线程结束 for thread in threads: thread.join() # 释放摄像头 for camera in cameras: camera.release() ``` 在这个示例中,我们创建了多个`Label`控件来显示每个摄像头的图像。在`read_frames`函数中,我们将每个摄像头读取的图像转换为`PIL`图像,并使用`ImageTk`将其转换为Tkinter可用的图像格式。 然后,我们使用`threading`模块创建并启动了多个线程,每个线程负责读取一个摄像头的图像。在Tkinter的主循环中,我们使用`update_image_labels`函数来更新图像显示。 请注意,由于Tkinter是单线程的,我们不能直接在其他线程中更新图像显示。因此,在每次更新图像显示后,我们使用`window.after(10, update_image_labels)`来调度下一次更新,以确保界面响应和流畅性。 希望对您有所帮助!如有任何疑问,请随时提问。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值