Ⅰ 树莓派opencv python读取摄像头
你的报错是找不到制定的function。
我的电脑上有这个:
In[1]:importcv2
In[2]:cv2.cvtColor
Out[2]:<functioncv2.cvtColor>
如果你没有的话查查安装的opencv全了么?
下面代码跟你的基本一致,这个测试可用。
defcap_frame():
cap=cv2.VideoCapture(0)
ret,frame=cap.read()
plt.imshow(frame,cmap='gray',interpolation='bicubic')
cap.release()
returnframe
Ⅱ 如何使用PYTHON操作摄像头
建议在知乎上问,知乎上大神比较多。
(我学了两年python了 也不知道python可以操作摄像头这么厉害。。。)
Ⅲ python如何能采集多个摄像头的数据
可以,用PYQT+CV2,四个USB连接成功,程序如下,UI要自己搞了,放不下
# -*- coding: utf-8 -*-
import sys#, time
from PyQt5 import QtWidgets
from PyQt5.QtCore import QTimer, QThread, pyqtSignal
from Ui_cv2ui_thread import Ui_MainWindow
import cv2 as cv
from PyQt5.QtGui import QImage, QPixmap
from PyQt5.QtWidgets import (QApplication, QDialog, QFileDialog, QGridLayout,
QLabel, QPushButton, QColorDialog)
import numpy as np
class MainWindow(QtWidgets.QMainWindow, Ui_MainWindow):
def __init__(self, parent=None):
super(MainWindow, self).__init__(parent=parent)
self.setupUi(self) #这个一定要在这个最前面位置
# define the slot for pushbutton to save the merged image
self.pushButton.clicked.connect(self.savemergeimage)
self.img = np.ndarray(()) #空的numpy array
self.img1 = np.ndarray(())
self.img2= np.ndarray(())
self.img3= np.ndarray(())
self.img4= np.ndarray(())
self.img4= np.empty([960,1280, 3], int)
self.cap = cv.VideoCapture(3) #注意,由大开到小,很重要
self.cap.set(3, 640) # setup the resolution of CCD
self.cap.set(4, 480)
ret, self.img=self.cap.read()
self.cap1 = cv.VideoCapture(2)
self.cap1.set(3, 640)
self.cap1.set(4, 480)
ret, self.img1=self.cap1.read()
self.cap2 = cv.VideoCapture(1)
self.cap2.set(3, 640)
self.cap2.set(4, 480)
ret, self.img2=self.cap2.read()
self.cap3 = cv.VideoCapture(0)
self.cap3.set(3, 640)
self.cap3.set(4, 480)
ret, self.img3=self.cap3.read()
#time.sleep(1)也许需要延迟,等他准备好
# 初始化一个定时器,在其他条件下用的
#self.timer = QTimer(self)
# 实例化一个线程
self.work0= WorkThread()
self.work0.trigger.connect(self.ccd2)
# 定义时间任务是一次性任务就设定下一行
#self.timer.setSingleShot(True)
# 启动时间任务,注意一致性
self.work0.start()
# 实例化一个线程
self.work= WorkThread()
# 多线程的信号触发连接到ccd3
self.work.trigger.connect(self.ccd3)
self.work.start()
# 实例化一个线程
self.work2 = WorkThread()
# 多线程的信号触发连接到ccd4
self.work2.trigger.connect(self.ccd4)
self.work2.start()
# 实例化一个线程
self.work3 = WorkThread()
# 多线程的信号触发连接到ccd1
self.work3.trigger.connect(self.ccdmerge)
self.work3.start()
self.work4 = WorkThread()
# 多线程的信号触发连接到ccd1
self.work4.trigger.connect(self.ccd1)
self.work4.start()
def refreshShowa(self):#显示ccd1到label1
# 提取图像的尺寸和通道, 用于将opencv下的image转换成Qimage
height, width, channel = self.img.shape
bytesPerLine = 3 * width
self.qImg = QImage(self.img.data, width, height, bytesPerLine,
QImage.Format_RGB888).rgbSwapped()
# 将Qimage显示出来
self.label.setPixmap(QPixmap.fromImage(self.qImg))
def refreshShowb(self):#显示ccd2到label2
# 提取图像的尺寸和通道, 用于将opencv下的image转换成Qimage
height, width, channel = self.img1.shape
bytesPerLine = 3 * width
self.qImg1 = QImage(self.img1.data, width, height, bytesPerLine,
QImage.Format_RGB888).rgbSwapped()
# 将Qimage显示出来
self.label_2.setPixmap(QPixmap.fromImage( self.qImg1))
def refreshShowc(self):#显示ccd3到label3
# 提取图像的尺寸和通道, 用于将opencv下的image转换成Qimage
height, width, channel = self.img2.shape
bytesPerLine = 3 * width
self.qImg2 = QImage(self.img2.data, width, height, bytesPerLine,
QImage.Format_RGB888).rgbSwapped()
# 将Qimage显示出来
self.label_3.setPixmap(QPixmap.fromImage( self.qImg2))
def refreshShowd(self):#显示ccd4到label4
# 提取图像的尺寸和通道, 用于将opencv下的image转换成Qimage
height, width, channel = self.img3.shape
bytesPerLine = 3 * width
self.qImg3 = QImage(self.img3.data, width, height, bytesPerLine,
QImage.Format_RGB888).rgbSwapped()
# 将Qimage显示出来
self.label_4.setPixmap(QPixmap.fromImage( self.qImg3))
def refreshShowe(self):#显示合并的影像到label6
# 提取图像的尺寸和通道, 用于将opencv下的image转换成Qimage
height, width, channel = self.img4.shape
bytesPerLine = 3 * width
self.qImg4 = QImage(self.img4.data, width, height, bytesPerLine,
QImage.Format_RGB888).rgbSwapped()
# 将Qimage显示出来
self.label_6.setPixmap(QPixmap.fromImage( self.qImg4))
def ccd1(self):
self.cap.set(3, 640)
self.cap.set(4, 480)
ret, self.img = self.cap.read()
self.refreshShowa()
# 启动另一个线程
self.work0.start()#注意一致性
def ccd2(self, str):
self.cap1.set(3, 640)
self.cap1.set(4, 480)
ret, self.img1 = self.cap1.read()
self.refreshShowb()
self.work.start()#注意一致性
def ccd3(self, str):
self.cap2.set(3, 640)
self.cap2.set(4, 480)
ret, self.img2= self.cap2.read()
self.refreshShowc()
self.work2.start()#注意一致性
def ccd4(self, str):
self.cap3.set(3, 640)
self.cap3.set(4, 480)
ret, self.img3 = self.cap3.read()
self.refreshShowd()
self.work3.start()#注意一致性
def ccdmerge(self, str):
self.img4=np.hstack((self.img, self.img1))
self.img4=np.vstack((self.img4, np.hstack((self.img2, self.img3))))
#print ('here is a merge process') 可以用来判断多线程的执行
self.refreshShowe() #later to remove the remark
self.work4.start()#注意一致性
def savemergeimage(self):
# 调用存储文件dialog
fileName, tmp = QFileDialog.getSaveFileName(
self, 'Save Image', './__data', '*.png *.jpg *.bmp', '*.png')
if fileName == '':
return
if self.img.size == 1:
return
# 调用opencv写入图像
cv.imwrite(fileName,self.img4)
class WorkThread(QThread): #多线程核心,非常重要
# 定义一个信号
trigger = pyqtSignal(str)
def __int__(self):
# 初始化函数,默认
super(WorkThread, self).__init__()
def run(self):
self.trigger.emit('')
if __name__ == "__main__":
app = QtWidgets.QApplication(sys.argv)
w = MainWindow()
w.show()
sys.exit(app.exec_())
Ⅳ python怎样通过opencv调用摄像头
Import cv2,cap = cv2.VideoCapture(0),ret,frame = cap.read(),cv2.imwrite("a.png",frame),调用摄像头并输出图像即可。
Ⅳ python如何调用IP摄像头
正在用python+opencv做一个视频采集程序,在一个局域网中有多个ip摄像头和一个usb摄像头,如何知道调用的是哪个摄像头,检查该摄像状态,并且获得该摄像头的权限,也就是收到该摄像头的返回数据
Ⅵ 用python编程做了个摄像头拍照程序,为何拍出来的照片分辨率不可调
OpenCV读的是视频流,所以摄像机视频流的像素上限要弄清楚,跟单纯拍照不一样,一个800万像素的相机视频流应该只有1080,再往上调像素没有意义了已经。
Ⅶ python+opencv 调用电脑摄像头,怎么解决,求大神指点
把摄像头的驱动删掉了重新安装试下 不好说,电脑摄像头硬件是不是出现问题了。
Ⅷ python 怎么打开电脑摄像头
此方案为朋友LSJ提出并实现的,转过来供学习用,由于在测试时没有架设WEB服务器,也没有做手机上的测试,仅通过PC测试了下,最完整解决方案请参考原出处《DIY手机监控系统》。
方法:
1 下载并安装VideoCapture、PIL。
2.编码,3s抓一个图片并保存
[python]view plain
fromVideoCaptureimportDevice
importtime,string
interval=2
cam=Device(devnum=0,showVideoWindow=0)
#cam.setResolution(648,480)
cam.saveSnapshot('image.jpg',timestamp=3,boldfont=1,quality=75)
i=0
quant=interval*.1
starttime=time.time()
while1:
lasttime=now=int((time.time()-starttime)/interval)
printi
cam.saveSnapshot('image.jpg',timestamp=3,boldfont=1)
i+=1
whilenow==lasttime:
now=int((time.time()-starttime)/interval)
time.sleep(quant)
3.写个网页,3s刷新一次,如下:
[html]view plain
<HTML>
<HEAD>
<metahttp-equiv="Content-Type"content="text/html;charset=gb2312"/>
<title>Web监视</title>
<METAhttp-equiv="refresh"content="3">
<METAhttp-equiv="Expires"content="0">
<METAhttp-equiv="Pragma"content="no-cache">
</HEAD>
<body>
<imgsrc='[email protected]'width="47%"height="381"/>
</body>
</HTML>
4. 测试:
Ⅸ 如何使用Python操作摄像头
用过USB摄像头的都知道,你需要使用鼠标来操作它,比如截个图,录个像什么的,要点N次鼠标,对于我们那些不喜欢多次点击鼠标的人来说,这是一件很boring的事情!
Ⅹ python如何获取本机安装的多个摄像头
python一般要与摄像头等硬件交互时,要用到ctypes模块引用摄像头sdk开发包中的dll,根据开发包中的函数说明文档来调用函数即可实现。例如:
import ctypes
libc=ctypes.CDLL('libc.dylib')
libc.atoi()输出12345