python+opencv学习

news2025/1/21 9:36:00

1. 把所有绿色通道值变为0

import cv2
import numpy as np

img=cv2.imread('2.jpg')
#读取图片
img[:,:,1]=0
#绿色通道变为0
cv2.imshow('图片',img)
#显示图片
cv2.waitKey(0)
#无限地显示窗口

 

 人生建议,一定要买书来学习呀,不是说教程不好,而是书真的相对来说更系统。

2.实现图片的局部截取并覆盖其他区域

import cv2
import numpy as np

img=cv2.imread('4.jpg')
my_roi=img[0:200,0:100]
img[300:500,300:400]=my_roi
cv2.imshow('pic',img)
cv2.waitKey(0)

 3.图片的基本信息

import cv2
import numpy as np

img=cv2.imread('4.jpg')
print(img.shape)#宽,高,通道数
print(img.size)#像素大小
print(img.dtype)#datatype:图像的数据类型

输出:

(750, 500, 3)
1125000
uint8

1125000=750*500*3(字节) 

4.实时显示摄像头,如果点击窗口或按下键盘,窗口关闭

import cv2

clicked=False
def onMouse(event,x,y,flags,param):
    global clicked
    if event == cv2.EVENT_LBUTTONUP:
        clicked = True
    #鼠标左键松开,clicked变为true

cameraCapture =cv2.VideoCapture(0)
#参数为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()
cv2.destroyWindow('MyWindow')
cameraCapture.release()

 5.读取视频帧并显示

Python-OpenCV读取视频文件_python opencv 读取视频_Scarlett2025的博客-CSDN博客

import cv2

cap = cv2.VideoCapture('02.mp4')  # 创建一个视频获取对象

while True:
    ret,frame=cap.read()
    if not ret:
        break
    cv2.imshow('video',frame)
    if(cv2.waitKey(50)==27):
        break

按下Esc键,退出。

 6.读取视频帧,显示,同时可以把帧写入新视频中,这里把mp4格式的视频帧提取出来,转存到avi格式的视频中。

学习自:

Opencv-Python捕获视频帧,显示和保存它的流_python 保存视频流_Scarlett2025的博客-CSDN博客

import cv2

cap = cv2.VideoCapture('02.mp4')  # 创建一个视频获取对象

cap.set(cv2.CAP_PROP_FRAME_HEIGHT,1080)
cap.set(cv2.CAP_PROP_FRAME_WIDTH,1920)
cap.set(cv2.CAP_PROP_POS_FRAMES, 100)
#从第100帧开始提取
w = cap.get(cv2.CAP_PROP_FRAME_WIDTH)
# 获取视频帧的高
h = cap.get(cv2.CAP_PROP_FRAME_HEIGHT)
# 获取视频帧的帧率
fps = cap.get(cv2.CAP_PROP_FPS)
# 获取视频流的总帧数
fcount = cap.get(cv2.CAP_PROP_FRAME_COUNT)
print(w,h,fps,fcount)
#1280.0 720.0 25.0 271.0

#VideoWriter(filename, fourcc, fps, frameSize[, isColor]) -> <VideoWriter object>
#文件路径,编码器,帧率,画面尺寸,画面是彩色还是黑白
writer = cv2.VideoWriter('output.avi', cv2.VideoWriter_fourcc('X', 'V', 'I', 'D'), int(fps), (int(w), int(h)))
#xvid:MPEG-4编码类型,后缀为.avi

while cap.isOpened():
    success,frame=cap.read()
    while success:
        cv2.imshow("try",frame)
        success,frame=cap.read()

        writer.write(frame)

        if(cv2.waitKey(20) & 0xff ==ord('q')):
            break
        #&oxFF是一种防止异常的机制
        #ord():从给定字符串中获取数字值
    if(success ==False):
        break

cap.release()
writer.release()
cv2.destroyAllWindows()

7.矩阵翻转

numpy中矩阵的翻转(flip)_numpy矩阵翻转_patrickpdx的博客-CSDN博客

import cv2
import numpy
a=numpy.random.randint(1,9,size=9).reshape((3,3))

print(a)
print(numpy.flip(a,axis=0))#上下翻转
print(numpy.flip(a,axis=1))#左右翻转

[[3 5 2]
 [5 3 5]
 [5 1 8]]
[[5 1 8]
 [5 3 5]
 [3 5 2]]
[[2 5 3]
 [5 3 5]
 [8 1 5]]

 python:np.fliplr()_fliplr python_蹦跶的小羊羔的博客-CSDN博客

import numpy as np

array=np.arange(8).reshape((2,2,2))
print("Original array : \n",array)

print("Flipped array left-right:\n",np.fliplr(array))

Original array : 
 [[[0 1]
  [2 3]]

 [[4 5]
  [6 7]]]
Flipped array left-right:
 [[[2 3]
  [0 1]]

 [[6 7]
  [4 5]]]

2行2列,4个元素,每个元素是二元组

比如:

A B
C D

变为:

B A

D C

利用 numpy.fliplr()实现图片的左右翻转

import numpy as np
import cv2
a=cv2.imread("xx.jpg",cv2.IMREAD_GRAYSCALE)
cv2.imshow('pic1',a)
cv2.waitKey(0)
print("Original array : \n",a)
b=np.fliplr(a)
print("Flipped array left-right:\n",b)
cv2.imshow('pic',b)
cv2.waitKey(0)

 实践证明:不转灰度图也是可以的。

 

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/813012.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

idea application.yml配置文件没有提示或读不到配置

1.首先确定你的resources文件夹正常且yml文件图表和下面一样 不一样的右键去设置 2.确保你已经缩进了且层级关系正常 3.如果以上都不是&#xff0c;先考虑删除.idea重开试试 4.以上解决不了就装以下两个插件解决

[深入理解NAND Flash] 闪存(NAND Flash) 学习指南

依公开知识及经验整理&#xff0c;付费内容&#xff0c;禁止转载。 所在专栏 《深入理解Flash:闪存特性与实践》 1. 我想和你说 漠然回首&#xff0c;从事存储芯片行业已多年&#xff0c;这些年最宝贵的青春都献给了闪存&#xff0c;虽不说如数家珍&#xff0c;但也算专业。 …

【Git】git reflog git log

前言 日常开发过程中&#xff0c;我们经常会遇到要进行版本回退的情况&#xff0c;这时候需要使用git reflog和git reset 命令 git reflog 常用命令&#xff1a; 1、git reflog -n 查看多少条 2、git reflog show origin 查看远程历史变动 git log 什么都不加默认显示当前分…

SpringBoot项目中的web安全防护

最近这个月公司对项目进行了几次安全性扫描&#xff0c;然后扫描出来了一些安全漏洞&#xff0c;所以最近也一直在修复各种安全漏洞&#xff0c;还有就是最近在备考软考高级系统架构设计师&#xff0c;也刚好复习到了网络安全这一个章节&#xff0c;顺便将最近修复的安全漏洞总…

漏洞利用-PoC-in-GitHub+msf简单利用

查找库-PoC-in-GitHub 里面集成了几乎所有cve漏洞 下载&#xff1a;https://github.com/nomi-sec/PoC-in-GitHub 演示&#xff1a; 如想要查找vulfocus靶场中 Metabase远程命令执行漏洞 的利用方法。 可以下载一个Yomm闪电文件搜索 Yomm闪电文件搜索下载&#xff1a;https://…

Github-Copilot初体验-Pycharm插件的安装与测试

引言&#xff1a; 80%代码秒生成&#xff01;AI神器Copilot大升级 最近copilot又在众多独角兽公司的合力下&#xff0c;取得了重大升级。GitHub Copilot发布还不到两年&#xff0c; 就已经为100多万的开发者&#xff0c;编写了46%的代码&#xff0c;并提高了55%的编码速度。 …

代理模式——对象的间接访问

1、简介 1.1、概述 由于某些原因&#xff0c;客户端不想或不能直接访问某个对象&#xff0c;此时可以通过一个被称为“代理”的第三者来实现间接访问&#xff0c;该方案对应的设计模式被称为代理模式。 代理模式是一种应用很广泛的结构型设计模式&#xff0c;而且变化很多。…

活动回顾|火山引擎 DataLeap 分享:DataOps、数据治理、指标体系最佳实践(文中领取 PPT)

更多技术交流、求职机会&#xff0c;欢迎关注字节跳动数据平台微信公众号&#xff0c;回复【1】进入官方交流群 在 7 月 21 日至 22 日举行的 ArchSummit 全球架构师峰会&#xff08;深圳站&#xff09;及 DataFunCon.数据智能创新与实践大会&#xff08;北京站&#xff09;上&…

C++ 类的组合

解决复杂问题的有效方法就是将其层层分解为简单问题的组合&#xff0c;首先解决简单问题&#xff0c;复杂问题也就迎刃而解了。实际上&#xff0c;这种部件组装的生产方式广泛应用在工业生产中。例如&#xff0c;电视机的一个重要部件是显像管&#xff0c;但很多电视机厂自己并…

ARM裸机-7

1、S5PV210的地址映射 1.1、什么是地址映射 S5PV210属于ARM Cortex-A8架构&#xff0c;32位CPU&#xff0c;CPU设计时就有32根地址线&32根数据线。32根地址线决定了CPU的地址空间为4G&#xff0c;那么这4G空间如何分配使用&#xff1f;这个问题就是地址映射问题。 1.2、S…

AnimateDiff论文解读-基于Stable Diffusion文生图模型生成动画

文章目录 1. 摘要2. 引言3. 算法3.1 Preliminaries3.2. Personalized Animation3.3 Motion Modeling Module 4. 实验5.限制6. 结论 论文&#xff1a; 《AnimateDiff: Animate Your Personalized Text-to-Image Diffusion Models without Specific Tuning》 github: https://g…

高级 IO

目录 前言 什么是IO&#xff1f; 有哪些IO的的方式呢&#xff1f; 五种IO模型 这五种模型在特性有什么差别呢&#xff1f; 其他高级IO 非阻塞IO fcntl 实现函数SetNonBlock I/O多路转接之select 初识select select函数 参数说明&#xff1a; 关于timeval结构 函数…

【解惑笔记】树莓派+OpenCV+YOLOv5目标检测(Pytorch框架)

【学习资料】 子豪兄的零基础树莓派教程https://github.com/TommyZihao/ZihaoTutorialOfRaspberryPi/blob/master/%E7%AC%AC2%E8%AE%B2%EF%BC%9A%E6%A0%91%E8%8E%93%E6%B4%BE%E6%96%B0%E6%89%8B%E6%97%A0%E7%97%9B%E5%BC%80%E6%9C%BA%E6%8C%87%E5%8D%97.md#%E7%83%A7%E5%BD%95…

【多线程中的线程安全问题】线程互斥

1 &#x1f351;线程间的互斥相关背景概念&#x1f351; 先来看看一些基本概念&#xff1a; 1️⃣临界资源&#xff1a;多线程执行流共享的资源就叫做临界资源。2️⃣临界区&#xff1a;每个线程内部&#xff0c;访问临界资源的代码&#xff0c;就叫做临界区。3️⃣互斥&…

python与深度学习(十一):CNN和猫狗大战

目录 1. 说明2. 猫狗大战2.1 导入相关库2.2 建立模型2.3 模型编译2.4 数据生成器2.5 模型训练2.6 模型保存2.7 模型训练结果的可视化 3. 猫狗大战的CNN模型可视化结果图4. 完整代码5. 猫狗大战的迁移学习 1. 说明 本篇文章是CNN的另外一个例子&#xff0c;猫狗大战&#xff0c…

建立动态数组,输入5个学生的,另外用一个函数检查其中有无低于60分的,输出不合格的成绩。

题为c程序设计&#xff08;第五版&#xff09;谭浩强 例8.30 文章目录 前言一、pandas是什么&#xff1f;二、使用步骤 1.引入库2.读入数据总结 前言 这篇博客&#xff0c;让我们一起来学习内存的动态分配。 那么&#xff0c;什么是内存的动态分配呢&#xff1f;C语言允许建立…

RS485或RS232转ETHERCAT连接ethercat转换器

最近&#xff0c;生产管理设备中经常会遇到两种协议不相同的情况&#xff0c;这严重阻碍了设备之间的通讯&#xff0c;串口设备的数据不能直接传输给ETHERCAT。这可怎么办呢&#xff1f; 别担心&#xff0c;捷米JM-ECT-RS485/232来了&#xff01;这是一款自主研发的ETHERCAT从站…

FreeRTOS源码分析-7 消息队列

目录 1 消息队列的概念和作用 2 应用 2.1功能需求 2.2接口函数API 2.3 功能实现 3 消息队列源码分析 3.1消息队列控制块 3.2消息队列创建 3.3消息队列删除 3.4消息队列在任务中发送 3.5消息队列在中断中发送 3.6消息队列在任务中接收 3.7消息队列在中断中接收 1 消…

【RTT驱动框架分析03】- sfus flash 操作库的分析和基于STM32F103RCT6+CUBEMX的SFUS移植教程

sfus flash 操作库的分析 sfus 抽象 /*** serial flash device*/ typedef struct {char *name; /**< serial flash name */size_t index; /**< index of flash device information table see flash_…