博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
cv2 基础操作技巧
阅读量:1860 次
发布时间:2019-04-26

本文共 9088 字,大约阅读时间需要 30 分钟。

修改图片某一通道的值

输入:

import cv2import numpy as npimg = cv2.imread('RandomGray.png')img[:,:,0] = 255cv2.imshow('RRR.png',img)cv2.waitKey()

输出:

将图像某块区域拷贝到另一块区域

import cv2import numpy as npimg = cv2.imread('1.png')img[:,:,0] = 255my_roi = img[0:100,0:100]img[100:200,100:200] = my_roicv2.imshow('RRR.png',img)cv2.waitKey()

输出:

视频文件的读写操作:

import cv2 videoCapture = cv2.VideoCapture('123'.avi)fps = videoCapture.get(cv2.CAP_PROP_FPS)size = int(int(videoCapture.get(cv2.CAP_PROP_FRAME_WIDTH)),           int(videoCapture.get(cv2.CAP_PROP_FRAME_HEIGHT)))videoWriter = cv2.VideoWriter('out.avi',cv2.VideoWriter_fourcc('I','4','2','0'),fps,size)success,frame = videoCapture.read()while success:    videoWriter.write(frame)    success,frame = videoCapture.read()

捕获摄像头的帧:捕获10s 电脑摄像头视频

import cv2cameraCapture = cv2.VideoCapture(0)fps =30size = (int(cameraCapture.get(cv2.CAP_PROP_FRAME_WIDTH)),           int(cameraCapture.get(cv2.CAP_PROP_FRAME_HEIGHT)))videoWriter = cv2.VideoWriter('out.avi',cv2.VideoWriter_fourcc('I','4','2','0'),fps,size)success,frame = cameraCapture.read()numFrameRemaining = 10 * fps -1while success and numFrameRemaining > 0:    videoWriter.write(frame)    success,frame = cameraCapture.read()    numFrameRemaining -= 1""""    一组摄像头或一个多头摄像头的使用方法"""    # success0 = cameraCapture0.grab()# success1 = cameraCapture1.grab()# if success0 and success1:#     frame0 = cameraCapture0.retrieve()#     frame1 = cameraCapture1.retrieve()cameraCapture.release()

图片显示:

import cv2 import numpy as npimg = cv2.imread('hcl.jpg')cv2.imshow('hcl',img)cv2.waitKey()cv2.destroyAllWindows()

视频显示:

其实这里面代码是通过图片不断更新实现视频效果,可通过注释的sleep看到效果

import cv2 import numpy as npimport timeclicked = Falsedef onMouse(event,x,y,flags,param):    global clicked    if event == cv2.EVENT_LBUTTONUP:        clicked = TruecameraCapture = cv2.VideoCapture(0)cv2.namedWindow('myWindow')cv2.setMouseCallback('myWindow',onMouse)print('showing camera feed.click window or press any key to stop')success,frame = cameraCapture.read()while success and cv2.waitKey(1) == -1 and not clicked:    cv2.imshow('myWindow',frame)    success,frame = cameraCapture.read()    #time.sleep(1)    cv2.destroyWindow('myWindow')cameraCapture.release()
打开摄像头,tab录制视频,space截图,exit退出
managers.py
import cv2import numpyimport timeclass CaptureManager(object):        def __init__(self, capture, previewWindowManager = None,                 shouldMirrorPreview = False):                self.previewWindowManager = previewWindowManager        self.shouldMirrorPreview = shouldMirrorPreview                self._capture = capture        self._channel = 0        self._enteredFrame = False        self._frame = None        self._imageFilename = None        self._videoFilename = None        self._videoEncoding = None        self._videoWriter = None                self._startTime = None        self._framesElapsed = int(0)        self._fpsEstimate = None        @property    def channel(self):        return self._channel        @channel.setter    def channel(self, value):        if self._channel != value:            self._channel = value            self._frame = None        @property    def frame(self):        if self._enteredFrame and self._frame is None:            # As of OpenCV 3.0, VideoCapture.retrieve() no longer supports            # the channel argument.            # _, self._frame = self._capture.retrieve(channel = self.channel)            _, self._frame = self._capture.retrieve()        return self._frame        @property    def isWritingImage(self):        return self._imageFilename is not None        @property    def isWritingVideo(self):        return self._videoFilename is not None        def enterFrame(self):        """Capture the next frame, if any."""                # But first, check that any previous frame was exited.        assert not self._enteredFrame, \            'previous enterFrame() had no matching exitFrame()'                if self._capture is not None:            self._enteredFrame = self._capture.grab()        def exitFrame(self):        """Draw to the window. Write to files. Release the frame."""                # Check whether any grabbed frame is retrievable.        # The getter may retrieve and cache the frame.        if self.frame is None:            self._enteredFrame = False            return                # Update the FPS estimate and related variables.        if self._framesElapsed == 0:            self._startTime = time.time()        else:            timeElapsed = time.time() - self._startTime            self._fpsEstimate =  self._framesElapsed / timeElapsed        self._framesElapsed += 1                # Draw to the window, if any.        if self.previewWindowManager is not None:            if self.shouldMirrorPreview:                mirroredFrame = numpy.fliplr(self._frame).copy()                self.previewWindowManager.show(mirroredFrame)            else:                self.previewWindowManager.show(self._frame)                # Write to the image file, if any.        if self.isWritingImage:            cv2.imwrite(self._imageFilename, self._frame)            self._imageFilename = None                # Write to the video file, if any.        self._writeVideoFrame()                # Release the frame.        self._frame = None        self._enteredFrame = False        def writeImage(self, filename):        """Write the next exited frame to an image file."""        self._imageFilename = filename        def startWritingVideo(            self, filename,            encoding = cv2.VideoWriter_fourcc('M','J','P','G')):        """Start writing exited frames to a video file."""        self._videoFilename = filename        self._videoEncoding = encoding        def stopWritingVideo(self):        """Stop writing exited frames to a video file."""        self._videoFilename = None        self._videoEncoding = None        self._videoWriter = None        def _writeVideoFrame(self):                if not self.isWritingVideo:            return                if self._videoWriter is None:            fps = self._capture.get(cv2.CAP_PROP_FPS)            if fps <= 0.0:                # The capture's FPS is unknown so use an estimate.                if self._framesElapsed < 20:                    # Wait until more frames elapse so that the                    # estimate is more stable.                    return                else:                    fps = self._fpsEstimate            size = (int(self._capture.get(                        cv2.CAP_PROP_FRAME_WIDTH)),                    int(self._capture.get(                        cv2.CAP_PROP_FRAME_HEIGHT)))            self._videoWriter = cv2.VideoWriter(                self._videoFilename, self._videoEncoding,                fps, size)                self._videoWriter.write(self._frame)class WindowManager(object):        def __init__(self, windowName, keypressCallback = None):        self.keypressCallback = keypressCallback                self._windowName = windowName        self._isWindowCreated = False        @property    def isWindowCreated(self):        return self._isWindowCreated        def createWindow(self):        cv2.namedWindow(self._windowName)        self._isWindowCreated = True        def show(self, frame):        cv2.imshow(self._windowName, frame)        def destroyWindow(self):        cv2.destroyWindow(self._windowName)        self._isWindowCreated = False        def processEvents(self):        keycode = cv2.waitKey(1)        if self.keypressCallback is not None and keycode != -1:            # Discard any non-ASCII info encoded by GTK.            keycode &= 0xFF            self.keypressCallback(keycode)
cameo.py
import cv2from managers import WindowManager, CaptureManagerclass Cameo(object):        def __init__(self):        self._windowManager = WindowManager('Cameo',                                            self.onKeypress)        self._captureManager = CaptureManager(            cv2.VideoCapture(0), self._windowManager, True)        def run(self):        """Run the main loop."""        self._windowManager.createWindow()        while self._windowManager.isWindowCreated:            self._captureManager.enterFrame()            frame = self._captureManager.frame                        if frame is not None:                # TODO: Filter the frame (Chapter 3).                pass                        self._captureManager.exitFrame()            self._windowManager.processEvents()        def onKeypress(self, keycode):        """Handle a keypress.                space  -> Take a screenshot.        tab    -> Start/stop recording a screencast.        escape -> Quit.                """        if keycode == 32: # space            self._captureManager.writeImage('screenshot.png')        elif keycode == 9: # tab            if not self._captureManager.isWritingVideo:                self._captureManager.startWritingVideo(                    'screencast.avi')            else:                self._captureManager.stopWritingVideo()        elif keycode == 27: # escape            self._windowManager.destroyWindow()if __name__=="__main__":    Cameo().run()
你可能感兴趣的文章
五大量化模型,成功的经商者都知道!
查看>>
毕业季.公司 | 百度:AI技术哪家强,度厂科大最在行?
查看>>
2021-03-25 通俗易懂剖析Zookeeper
查看>>
Java连接数据库: Could not create connection to database server +SSL的警告
查看>>
树形选择排序(锦标赛排序)
查看>>
KMP算法讲解与实现
查看>>
pytorch安装流程及注意事项
查看>>
大学物理·速过·第一章:运动和力
查看>>
元胞自动机
查看>>
三步解决Vue项目axios跨域问题
查看>>
Vue项目vue-awesome-swiper问题(样式, pagination, autoplay等)
查看>>
Vue项目解决better-scroll无法滚动
查看>>
`Model.XXX` is not supported when the `Model` instance was constructed with eager mode enabled
查看>>
QT--QTableWidget中;设置单击单元格响应不同事件(强烈建议参阅)
查看>>
RTE 2020 实时互联网大会参会指南——明天我们线上见!
查看>>
RTE 2020实时互联网大会今日开幕 探讨实时互动的场景化创新与技术衍变
查看>>
声网发布Agora云市场2.0计划 全球注册应用开发者突破21万
查看>>
10个颠覆性创业项目来了!RTE 2020 实时互联网创业挑战赛圆满收官
查看>>
用VScode 插件做代码同步演示,原来实时信令控制还能这么玩
查看>>
RTC 月度小报 10 月 | 「RTE 2020实时互联网大会」顺利落幕、获奖算法模型开源
查看>>