Python-Opencv 基本操作(一)

2023-10-30

下面完整代码在github仓库:传送门


一、在图片上画线

import cv2

img = cv2.imread("1.jpg", 0)  # 默认1为真彩色,0为灰色

# opencv的图像模式是BGR
cv2.line(img, (10, 10), (100, 100), [0, 0, 255], 3)
cv2.imshow("", img)
cv2.waitKey(10000)
cv2.destroyAllWindows()

二、图像通道BGR转换RGB

import cv2
from PIL import Image

img = cv2.imread("1.jpg")

cv2.line(img, (10, 10), (100, 100), [0, 0, 255], 3)
cv2.rectangle(img, (10, 10), (100, 100), [0, 0, 255], 3)

# h, w, c
# img = img[:, :, ::-1]  # ::-1表示将RGB倒序输出
# BGR通道的图像转换成RGB的图像
img = img[..., ::-1]
img = Image.fromarray(img)
img.show()

三、画矩形框

import cv2
from PIL import Image

img = cv2.imread("1.jpg")
cv2.line(img, (10, 10), (100, 100), [0, 0, 255], 3)
cv2.rectangle(img, (10, 10), (100, 100), [0, 0, 255], 3)

cv2.imshow("", img)
cv2.waitKey(0)
cv2.destroyAllWindows()

四、图片变形

import cv2

img = cv2.imread("1.jpg")
# print(type(img))
# print(img)

img_size = img.shape
print(img_size)
img = cv2.resize(img, (img_size[1]//2, img_size[0]//2))

cv2.imshow("img", img)
cv2.waitKey(10000)
cv2.destroyAllWindows()
cv2.imwrite("2.jpg", img)

五、opencv转换到PIL

import cv2
from PIL import Image
import numpy as np

# 从opencv转换到PIL
img_arr = cv2.imread("3.jpeg")
img_arr = cv2.cvtColor(img_arr, cv2.COLOR_BGR2RGB)  # 改变通道
img = Image.fromarray(img_arr)  # 改变图像数据类型
img.show()

六、利用opencv播放视频

import cv2

path = "1.mp4"  # 本地视频路径
# path = r"http://vfx.mtime.cn/Video/2019/03/19/mp4/190319125415785691.mp4"  # 在线视频路径

# cap = cv2.VideoCapture(0)  # 调取内置摄像头
cap = cv2.VideoCapture(path)  # 获取视频对象

fps = cap.get(cv2.CAP_PROP_FPS)  # 从视频对象中获取帧数
print(fps)

w = int(cap.get(3))  # 获取图片的宽度
h = int(cap.get(4))  # 获取图片的高度
# print(w)
# print(h)


fourc = cv2.VideoWriter_fourcc(*"DVIX")  # 视频格式
out = cv2.VideoWriter("2.mp4", fourc, fps, (w, h))  # 写入视频格式

font = cv2.FONT_HERSHEY_COMPLEX
# frame表示读出的每一张图片, ret表示这一张图片是否存在
while True:
    ret, frame = cap.read()
    # 将十六进制数据转成 二进制数据
    if cv2.waitKey(int(1000 / fps)) & 0xFF == ord("q"):  # 视频在播放的过程中按键,循环会中断)。
        break
    elif ret == False:  # 视频播放完了,循环自动中断。
        break
    cv2.rectangle(frame, (200, 50), (300, 150), [0, 0, 255], 3)
    out.write(frame)

    # 前面的1表示字体大小,后面的1表示字体厚度, lineType抗锯齿
    cv2.putText(frame, "beautiful girl 啊", (100, 100), font, 1, (0, 0, 255), 1, lineType=cv2.LINE_AA)
    cv2.imshow("", frame)

cap.release()  # 将视频关了
cv2.destroyAllWindows()

七、PIL转换到Opencv

import cv2
from PIL import Image
import numpy as np

# 从PIL转换到opencv
img = Image.open("3.jpeg")
img_arr = np.array(img)  # 从图像数据转成numpy数据类型

img_arr = cv2.cvtColor(img_arr, cv2.COLOR_RGB2BGR)  # 转通道
cv2.imshow("", img_arr)
cv2.waitKey(0)

img_arr = img_arr[..., ::-1]

cv2.imshow("", img_arr)
cv2.waitKey(0)
cv2.destroyAllWindows()

八、合成图片通道

import cv2
from PIL import Image

img = cv2.imread("1.jpg")

b, g, r = cv2.split(img)

cv2.imshow("b", b)  # 显示灰度图
cv2.imshow("g", g)
cv2.imshow("r", r)

img = cv2.merge([g, r, b])  # 合成通道
cv2.imshow("", img)
cv2.waitKey(0)
cv2.destroyAllWindows()

九、给视频图像加滤波

import cv2
import numpy as np
from PIL import Image, ImageFilter

cap = cv2.VideoCapture("1.mp4")

fps = cap.get(cv2.CAP_PROP_FPS)
while True:
    ret, frame = cap.read()
    img_arrs = frame[..., ::-1]
    imgs = Image.fromarray(img_arrs)

    img = imgs.filter(ImageFilter.MinFilter(5))
    img_arr = np.array(img)[..., ::-1]
    cv2.imshow("", img_arr)

    if cv2.waitKey(int(1000/fps)) & 0xFF == ord("q"):
        break
    elif ret == False:
        break

cap.release()  # 关闭视频
cv2.destroyAllWindows()  # 关闭窗口

十、视频图像变灰度

import cv2
import numpy as np
from PIL import Image, ImageFilter

cap = cv2.VideoCapture("1.mp4")

fps = cap.get(cv2.CAP_PROP_FPS)
while True:
    ret, frame = cap.read()
    # img1 = cv2.cvtColor(frame, cv2.COLOR_BGR2GRAY)
    img1 = cv2.cvtColor(frame, cv2.COLOR_BGR2HSV)  # HSV是连续的色彩空间

    cv2.imshow("", img1)

    if cv2.waitKey(int(1000/fps)) & 0xFF == ord("q"):
        break
    elif ret == False:
        break

cap.release()  # 关闭视频
cv2.destroyAllWindows()  # 关闭窗口

十一、找视频图像轮廓

import cv2
import numpy as np
from PIL import Image, ImageFilter

cap = cv2.VideoCapture("1.mp4")

fps = cap.get(cv2.CAP_PROP_FPS)
while True:
    ret, frame = cap.read()

    img_arr = frame[..., ::-1]
    img1 = Image.fromarray(img_arr)

    # img2 = img1.filter(ImageFilter.CONTOUR)  # 图像轮廓
    # img2 = img1.filter(ImageFilter.EMBOSS)
    img2 = cv2.cvtColor(img_arr, cv2.COLOR_RGB2GRAY)

    img3_arr = np.array(img2)[..., ::-1]  # 转数据类型和通道
    cv2.imshow("", img3_arr)

    if cv2.waitKey(int(1000/fps)) & 0xFF == ord("q"):
        break
    elif ret == False:
        break

cap.release()  # 关闭视频
cv2.destroyAllWindows()  # 关闭窗口

十二、通道分离

import cv2
import numpy as np

img_arr = np.empty([400, 400, 3], np.uint8)  # 生成空矩阵
print(img_arr)

# [0, 0, 255]
img_arr[..., 0] = 0
img_arr[..., 1] = 0
img_arr[..., 2] = 255  # 将第三个通道的像素值填为255

cv2.imshow("", img_arr)
cv2.waitKey(0)
cv2.destroyAllWindows()
import cv2
from PIL import Image

# 将图像变为单通道
img = cv2.imread("1.jpg")

img[..., 1] = 0
img[..., 2] = 0

cv2.imshow("", img)
cv2.waitKey(0)
cv2.destroyAllWindows()

十三、通道填值

import cv2
import numpy as np

img_arr = np.zeros([400, 400, 3], np.uint8)
# img_arr = np.ones([400, 400, 3])

# img_arr = np.arange(400*400*3).reshape([400, 400, 3]) / (400*400*3)
# img_arr = np.random.rand(400, 400, 3)
# img_arr = np.random.randn(400, 400, 3)
# img_arr = np.random.normal(0, 0.5, (400, 400, 3))

cv2.imshow("", img_arr)  # opencv中 像素值填0-1之间的值
cv2.waitKey(0)
cv2.destroyAllWindows()
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

Python-Opencv 基本操作(一) 的相关文章

  • opencv中矩阵的超快中值(与matlab一样快)

    我正在 openCV 中编写一些代码 想要找到一个非常大的矩阵数组 单通道灰度 浮点数 的中值 我尝试了几种方法 例如对数组进行排序 使用 std sort 和选择中间条目 但与 matlab 中的中值函数相比 它非常慢 准确地说 在 ma
  • 使用 opencv warpPerspective() 生成道路的自上而下视图

    我正在尝试实施逆透视映射计算与道路上另一辆车的距离 我知道在应用该函数之前我需要生成一个包含源点和目标点的变换矩阵warpPerspective 但我不知道如何计算目的地点 我在这个论坛和其他网站中搜索 但无法将第一张图片转换为第二张图片
  • 如何在给定目标大小的情况下在 python 中调整图像大小,同时保留纵横比?

    首先 我觉得这是一个愚蠢的问题 对此感到抱歉 目前 我发现计算最佳缩放因子 目标像素数的最佳宽度和高度 同时保留纵横比 的最准确方法是迭代并选择最佳缩放因子 但是必须有更好的方法来做到这一点 一个例子 import cv2 numpy as
  • 如何删除树莓派的相机预览

    我在我的 raspberryPi 上安装了 SimpleCv 并安装了用于使用相机板的驱动程序 uv4l 驱动程序 现在我想使用它 当我在 simpleCV shell Camera 0 getImage save foo jpg 上键入时
  • 我可以使用 openCV 比较两张不同图像上的两张脸吗?

    我对 openCV 很陌生 我看到它可以计算出脸部并返回一个矩形来指示脸部 我想知道 openCV 是否可以访问两张包含一张脸的图像 并且我希望 openCV 返回这两个人是否相同的可能性 Thanks OpenCV 不提供完整的人脸识别引
  • 来自连接到远程机器的相机的 Opencv 流

    我正在用 python 开发一个 wx 应用程序 用于流式传输和显示来自两个不同网络摄像头的视频 这工作正常 但现在我需要在不同的场景中执行此操作 其中两个摄像头连接在通过网络连接的 Windows 上运行的单独计算机中 我的应用程序将在机
  • 如何将输出视频保存到 OpenCV 中的文件中

    我想将输出视频保存到文件中而不是显示它并尝试使用 cvcaptureimage 但仍然无法获得结果 include
  • BASH 脚本编译多个 C++ 文件 - OpenCV

    请参见在C 和OpenCV中调用其他文件中的函数 https stackoverflow com questions 24442836 call functions in other files in c and opencv 对于最初的问
  • 当我将鼠标移到 Mat 关键字上时,Visual Studio 2017 冻结(OpenCv 3.4.1)

    我想在 Visual Studio 2017 中开发 openCv 项目 我下载了 opencv 预构建库并进行了必要的设置 那是 1 我添加了系统路径 build x64 vc14 bin 2 在 Visual Studio 中的项目属性
  • 检查图像中是否有太薄的区域

    我正在尝试验证雕刻机的黑白图像 更多的是剪贴画图像 不是照片 我需要考虑的主要事情之一是区域的大小 或线条的宽度 因为机器无法处理太细的线条 所以我需要找到比给定阈值更细的区域 以此图为例 竖琴的琴弦可能太细而无法雕刻 我正在阅读有关 Ma
  • 从图像坐标获取对象的世界坐标

    I have been following this http docs opencv org modules calib3d doc camera calibration and 3d reconstruction html docume
  • 使用 OpenCV 和/或 Numpy 对两个图像进行 Alpha 混合 [重复]

    这个问题在这里已经有答案了 我想将一个填充纯色的半透明矩形添加到已加载的半透明 PNG 中 这是我正在使用的输入图像示例 该图像加载了标准cv2 IMREAD UNCHANGED标志 以便完美保留 alpha 通道 该输入图像存储在imag
  • 使用 OpenCV 改进特征点匹配

    我想匹配立体图像中的特征点 我已经用不同的算法找到并提取了特征点 现在我需要一个良好的匹配 在本例中 我使用 FAST 算法进行检测和提取 BruteForceMatcher用于匹配特征点 匹配代码 vector lt vector
  • 从包含带边框的表格的图像中提取表格结构

    我正在尝试提取下表中的单元格位置 应用自适应阈值处理后 我能够获得细胞位置周围的轮廓 并且 HoughLines 获得垂直和水平结构元素 这是我的代码 img cv2 imread os path join img path file im
  • 2d 图像点和 3d 网格之间的交点

    Given 网格 源相机 我有内在和外在参数 图像坐标 2d Output 3D 点 是从相机中心发出的光线穿过图像平面上的 2d 点与网格的交点 我试图找到网格上的 3d 点 This is the process From Multip
  • opencv人脸检测示例

    当我在设备上运行应用程序时 应用程序崩溃并显示以下按摩 java lang UnsatisfiedLinkError 无法加载 detector based tracker findLibrary 返回 null 我正在使用 OpenCV
  • OpenCV Mat 和 Leptonica Pix 之间的转换

    我需要在 C 中在 OpenCV Mat 图像和 Leptonica Pix 图像格式之间进行转换 这用于 8 位灰度图像的二值化 我发现发现了 ikaliga的回答 https stackoverflow com a 25929320 2
  • cv2.VideoWriter:请求一个元组作为 Size 参数,然后拒绝它

    我正在使用 OpenCV 4 0 和 Python 3 7 创建延时视频 构造 VideoWriter 对象时 文档表示 Size 参数应该是一个元组 当我给它一个元组时 它拒绝它 当我尝试用其他东西替换它时 它不会接受它 因为它说参数不是
  • OpenCV:如何从网络摄像头获取原始 YUY2 图像?

    你知道如何获得吗raw YUY2来自网络摄像头的图像 使用 OpenCV DirectShow 无 VFW http opencv willowgarage com wiki CameraCapture http opencv willow
  • 图像梯度角计算

    我实际上是按照论文的说明进行操作的 输入应该是二进制 边缘 图像 输出应该是一个新图像 并根据论文中的说明进行了修改 我对指令的理解是 获取边缘图像的梯度图像并对其进行修改 并使用修改后的梯度创建一个新图像 因此 在 MATLAB Open

随机推荐

  • 2021-11-05 Leetcood 160 每日一题

    R星校长 已知两个单链表的头节点 headA 和 headB 请你找出并返回两个单链表相交的起始节点 如果两个链表没有交点 返回 null 杰哥我用白话翻译过来 链表A和链表B相交于C节点 我们返回C节点的地址 如果两个链表之间没有交点 程
  • jmeter性能测试常用插件简介

    jmeter性能测试常用插件简介 jmeter作为一个开源的接口性能测试工具 相对于商业性软件loadrunner来说 优点是更加灵活方便 操作简单 但相对来说 专业性和对性能参数的分析相对比较薄弱 但是通过第三方插件 就能将一些重要的参数
  • OpenCV 的浅拷贝和深拷贝,千万不要踩坑了!

    最近在使用 OpenCV 进行图像处理时 遇到一个小坑 这里总结一下 希望能对你有帮助 将一个变量赋给另一个变量 直接使用 符号即可 不过在 OpenCV 中就会遇到问题 Mat a b a b 都为 Mat 类型 这类拷贝方法是浅拷贝 没
  • 矩阵的逆以及实际应用

    矩阵逆的实际应用 最常见的是解线性方程组Ax b 如果A可逆 则解是x A 1 b 这类例子太多了 例如 小花 小明钱包里面各有几百元 小花金额的2倍和小明的金额 加起来是300元 小花金额的10倍比小明的金额对9倍 还多100元 则联立方
  • C语言之:数组的定义和初始化必备练习题

    1 作业标题 688 关于一维数组初始化 下面哪个定义是错误的 作业内容 A int arr 10 1 2 3 4 5 6 B int arr 1 2 3 4 5 6 C int arr 1 2 3 4 5 6 D int arr 10 0
  • Centos7安装Python2.7

    1 删除现有Python root test rpm qa grep python xargs rpm ev allmatches nodeps 强制删除已安装程序及其关联 root test whereis python xargs rm
  • 若依系统去redis

    1 注释 application yml文件中关于redis中所有的代码 2 修改framework模块下 RedisConfig该文件 删除也可以 3 在common模块中新建MyCache继承Cache类 package com xxx
  • 使用html+js书写分页功能

  • 【华为OD机试】拼接URL(C++ Python Java)2023 B卷

    时间限制 C C 1秒 其他语言 2秒 空间限制 C C 262144K 其他语言524288K 64bit IO Format lld 题目描述 给定一个URL前缀和URL后缀 通过 分割 需要将其连接为一个完整的URL 如果前缀结尾和后
  • Transformer背景介绍

    目录 Transformer的诞生 Transformer的优势 Transformer的市场 Transformer的诞生 论文地址 Transformer的优势 Transformer的市场
  • 解决el-table大数据表格卡顿问题

    解决el table大数据表格卡顿问题 使用umyui中的表格组件 使用ux grid组件 记录滚动条位置 使用umyui中的表格组件 umyui官网 当u table元素中注入data对象数组后 添加use virtual属性开启虚拟 同
  • MySQL基础(一)SQL基础

    DDL Data Definition Languages 数据定义语言 常用关键字包括create drop alter等 0 连接数据库 mysql u root pconnection id 表示的是连接次数1 创建数据库 CREAT
  • Android 应用安装成功之后删除apk文件

    问题 在应用开发中遇到需要这样的需求 在用户下载我们的应用安装之后删除安装包 解决 android会在每个外界操作APK的动作之后发出系统级别的广播 过滤器名称 android intent action package ADDED and
  • 实时音频编程(一)

    系列文章目录 实时音频编程 一 实时音频编程 二 实践与技巧 文章目录 系列文章目录 简介 实时系统 实时系统的分类 实时音频系统 什么会产生 glitch 阻塞 算法的最坏时间复杂度 锁 不使用锁的第一个原因 优先级倒置 不使用锁的第二个
  • 毕业设计 - 单片机自动写字机器人设计与实现 - 物联网 嵌入式 stm32

    文章目录 0 前言 1 简介 2 主要器件 3 实现效果 4 硬件设计 总体框架 AB32VG1主控MCU 5 软件说明 总体框架 6 部分核心代码 7 最后 0 前言 这两年开始毕业设计和毕业答辩的要求和难度不断提升 传统的毕设题目缺少创
  • 安卓是用java语言写的吗_android开发是用java语言吗?

    android开发的主流语言是java语言 但也可以使用其他语言 例可以通过Android NDK使用C C 作为编程语言来开发应用程序 也可使用SL4A来使用其他各种脚本语言进行编程 Android是以Linux为核心的手机操作平台 作为
  • 数字集成电路:电路系统与设计

    数字电路的设计 是按照层次化的方式进行的 在每一个设计层次上 一个复杂模块的内部细节可以被抽象化并用一个黑盒子或模型来替代 典型的抽象层次 器件 电路 门 功能模块 系统 这点类似于软件设计 也是采用层次化结构 一个完整的程序由若干个子程序
  • sqlserver给表添加新字段、给表和字段添加备注、更新备注及查询备注(sql语句)

    sqlserver给表添加新字段 给表和字段添加备注 更新备注及查询备注 代码如下所示 添加新字段及字段备注的语法 USE MY SlaughterProduct 数据库 ALTER TABLE MY SP PackagingWeight
  • 智能传感主要应用在哪些方面?

    人们普遍认为智能传感器是具有对外界环境等信息进行自动收集 数据处理以及自诊断与自适应能力的传感器 智能传感器 intelligentsensor 是具有信息处理功能的传感器 智能传感器带有微处理机 具有采集 处理 交换信息的能力 是传感器集
  • Python-Opencv 基本操作(一)

    下面完整代码在github仓库 传送门 文章目录 一 在图片上画线 二 图像通道BGR转换RGB 三 画矩形框 四 图片变形 五 opencv转换到PIL 六 利用opencv播放视频 七 PIL转换到Opencv 八 合成图片通道 九 给