OpenCV必知必会基础3(包括色彩空间的变换、ROI、OpenCV中最重要的结构体Mat以及获取图像的属性)

文章目录

  • OpenCV的色彩空间——RGB与BGR
  • OpenCV的色彩空间——HSV与HSL
    • HSV主要用于OpenCV中
    • HSL
  • OpenCV色彩空间转换
    • YUV主要用于视频中
    • 题目
  • 图像操作的基石Numpy【基础操作】
    • np.array
    • np.zeros
    • np.ones
    • np.full
    • np.identity
    • np.eye
  • Numpy基本操作之矩阵的检索与赋值
  • Numpy基本操作三——ROI(Region of Image)
  • OpenCV的重要结构体Mat
    • Mat属性
  • Mat的深拷贝与浅拷贝
    • Mat浅拷贝
    • Mat深拷贝
  • 图像的多种属性
  • 通道的分割与合并

在这里插入图片描述

OpenCV的色彩空间——RGB与BGR

主要用于物理硬件显示器中
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

OpenCV的色彩空间——HSV与HSL

HSV主要用于OpenCV中

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

HSL

在这里插入图片描述
在这里插入图片描述

OpenCV色彩空间转换

YUV主要用于视频中

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
详情见官网手册
在这里插入图片描述
在这里插入图片描述
cvtColor函数

# -*- coding: utf-8 -*-
import cv2def callback():pass# 创建窗口
cv2.namedWindow('color', cv2.WINDOW_NORMAL)img = cv2.imread('E://pic//love_girl_guy_beach_sea_peter_smile_couple_5760x3840.jpg')colorspaces = [cv2.COLOR_BGR2RGBA, cv2.COLOR_BGR2BGRA, cv2.COLOR_BGR2GRAY, cv2.COLOR_BGR2HSV, cv2.COLOR_BGR2YUV]cv2.createTrackbar('curcolor', 'color', 0, len(colorspaces), callback)while True:index = cv2.getTrackbarPos('curcolor', 'color')# 颜色空间转换APIcvt_img = cv2.cvtColor(img, colorspaces[index])cv2.imshow('color', cvt_img)key = cv2.waitKey(10)if key & 0xff == ord('q'):breakcv2.destroyAllWindows()

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

题目

在这里插入图片描述
A
在这里插入图片描述

图像操作的基石Numpy【基础操作】

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

np.array

在这里插入图片描述
在这里插入图片描述

np.zeros

在这里插入图片描述
在这里插入图片描述

np.ones

在这里插入图片描述
在这里插入图片描述

np.full

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

np.identity

在这里插入图片描述
在这里插入图片描述

np.eye

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

Numpy基本操作之矩阵的检索与赋值

在这里插入图片描述

# -*- coding: utf-8 -*-
import cv2
import numpy as npimg = np.zeros((480, 640), np.uint8)cnt = 0
while cnt < 200:img[cnt, 100] = 255cnt += 1cv2.imshow('img', img)
key = cv2.waitKey(0)
if key & 0xff == ord('q'):cv2.destroyAllWindows()

在这里插入图片描述

# -*- coding: utf-8 -*-
import cv2
import numpy as npimg = np.zeros((480, 640, 3), np.uint8)cnt = 0
while cnt < 200:# BGRimg[cnt, 100, 0] = 255cnt += 1cv2.imshow('img', img)
key = cv2.waitKey(0)
if key & 0xff == ord('q'):cv2.destroyAllWindows()

在这里插入图片描述

# -*- coding: utf-8 -*-
import cv2
import numpy as npimg = np.zeros((480, 640, 3), np.uint8)cnt = 0
while cnt < 200:img[cnt, 100] = [0, 0, 255]cnt += 1cv2.imshow('img', img)
key = cv2.waitKey(0)
if key & 0xff == ord('q'):cv2.destroyAllWindows()

在这里插入图片描述

Numpy基本操作三——ROI(Region of Image)

在这里插入图片描述

# -*- coding: utf-8 -*-
import cv2
import numpy as npimg = np.zeros((480, 640, 3), np.uint8)# cnt = 0
# while cnt < 200:
#     img[cnt, 100] = [0, 0, 255]
#     cnt += 1
roi = img[100:400, 200:600]
roi[:] = [0, 255, 0]cv2.imshow('img', roi)
key = cv2.waitKey(0)
if key & 0xff == ord('q'):cv2.destroyAllWindows()

在这里插入图片描述

# -*- coding: utf-8 -*-
import cv2
import numpy as npimg = np.zeros((480, 640, 3), np.uint8)# cnt = 0
# while cnt < 200:
#     img[cnt, 100] = [0, 0, 255]
#     cnt += 1
roi = img[100:400, 100:600]
roi[:] = [0, 255, 0]
roi[:, 100] = [0, 0, 0]
roi[10:200, 10:200] = [255, 0, 0]cv2.imshow('img', roi)
key = cv2.waitKey(0)
if key & 0xff == ord('q'):cv2.destroyAllWindows()

在这里插入图片描述

OpenCV的重要结构体Mat

在这里插入图片描述
在这里插入图片描述

Mat属性

在这里插入图片描述

Mat的深拷贝与浅拷贝

在这里插入图片描述
红色是我们原先创建的mat,蓝色是我们之后创建的mat,我们把A赋给B,默认浅拷贝

Mat浅拷贝

拷贝的是header,并没有拷贝data
在这里插入图片描述

Mat深拷贝

让Mat B独立,拷贝了一份data,完全和Mat A独立开来
在这里插入图片描述

# -*- coding: utf-8 -*-
import cv2
import numpy as npimg = cv2.imread('E://pic//2.jpg')# 默认浅拷贝
img2 = img# 深拷贝
img3 = img.copy()img[10:100, 10:100] = [0, 255, 66]
cv2.imshow('img', img)
cv2.imshow('img2', img2)
cv2.imshow('img3', img3)
key = cv2.waitKey(0)
if key & 0xff == ord('q'):cv2.destroyAllWindows()

在这里插入图片描述

图像的多种属性

# -*- coding: utf-8 -*-
import cv2
import numpy as npimg = cv2.imread('E://pic//2.jpg')
# shape属性中包含三个信息
# 高度、长度、通道数
print(img.shape)# 图像占用多大空间
# 高度 * 长度 * 通道数
print(img.size)# 图像中每个元素的位深
print(img.dtype)

在这里插入图片描述

通道的分割与合并

在这里插入图片描述
变成一个颜色的二维数组就没有颜色了,就只有黑白色之分了

# -*- coding: utf-8 -*-
import cv2
import numpy as npimg = cv2.imread('E://pic//2.jpg')b, g, r = cv2.split(img)
b[10:100, 10:100] = 255
g[10:100, 10:100] = 255
r[10:100, 10:100] = 255cv2.imshow('img', img)
cv2.imshow('b', b)
cv2.imshow('g', g)
cv2.imshow('r', r)key = cv2.waitKey(0)
if key & 0xff == ord('q'):cv2.destroyAllWindows()

在这里插入图片描述

# -*- coding: utf-8 -*-
import cv2
import numpy as npimg = cv2.imread('E://pic//2.jpg')b, g, r = cv2.split(img)
b[10:100, 10:100] = 255
g[10:100, 10:100] = 255
# r[10:100, 10:100] = 255img2 = cv2.merge((b, g, r))cv2.imshow('img', img)
cv2.imshow('b', b)
cv2.imshow('g', g)
cv2.imshow('r', r)
cv2.imshow('img2', img2)key = cv2.waitKey(0)
if key & 0xff == ord('q'):cv2.destroyAllWindows()

在这里插入图片描述

之后我会持续更新,如果喜欢我的文章,请记得一键三连哦,点赞关注收藏,你的每一个赞每一份关注每一次收藏都将是我前进路上的无限动力 !!!↖(▔▽▔)↗感谢支持!

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

如若内容造成侵权/违法违规/事实不符,请联系长河编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

腾讯待办是什么?关停之后如何继续提醒待办事项?

由于业务方向调整&#xff0c;腾讯待办将于2023年的12月20日全面停止运营并下架。那么腾讯待办是什么呢&#xff1f;它是一款以微信小程序呈现的待办事项和日程管理工具&#xff0c;旨在帮助用户更好地管理自己的待办事项和日程安排。用户可以在该小程序中创建待办事项、设置提…

前三季度亏损近亿元,「缺钱」的北斗智联拟变更控股股东

本月初&#xff0c;北斗星通发布《关于深圳证券交易所重组问询函回复的公告》&#xff0c;针对公司全资子公司拟出售孙公司北斗星通智联科技有限责任公司&#xff08;以下简称北斗智联&#xff09; 15%的股权事宜做出进一步解读。 按照此前计划&#xff0c;15%的股权&#xff0…

使用CycleGAN训练自己的数据集

一、下载源码 源码下载链接&#xff1a;https://github.com/junyanz/pytorch-CycleGAN-and-pix2pix 二、调整自己的数据集格式 按照如下格式放 三、安装好所需要的python包 使用命令&#xff1a;pip install 包名称 在anaconda里面安装&#xff0c; 四、训练和测试 在开始训…

LeetCode - 160. 相交链表(C语言,配图)

思路&#xff1a; 1. 我们算出两个链表的长度lenA&#xff0c;lenB。我们在这里最后判断一下&#xff0c;两个链表的尾节点是否是一样的&#xff0c;如果是相交链表&#xff0c;那它们的尾节点一定是一样的。 2. 算出长链表和短链表的差距n&#xff08;n | lenA- lenB |&#…

html图片控制处理放大缩小移动多种案例(附源码)

文章目录 1.图片处理风格1.1 简约版本图片预览1.2 图片查看器&#xff0c;可放大缩小&#xff0c;旋转1.3 图片放大镜效果1.4 图片放大显示&#xff0c;支持滚轮调整大小1.5 图片上下滑动缩略图字幕效果 2.效果和源码2.1 动态效果2.2 源代码 源码下载 作者&#xff1a;xcLeigh …

Google codelab WebGPU入门教程源码<3> - 绘制网格(源码)

对应的教程文章: https://codelabs.developers.google.com/your-first-webgpu-app?hlzh-cn#4 对应的源码执行效果: 对应的教程源码: 此处源码和教程本身提供的部分代码可能存在一点差异。 class Color4 {r: number;g: number;b: number;a: number;constructor(pr 1.0, p…

Linux下好玩的指令(持续更新)

适用于centOS下&#xff0c;别的Linux换个指令就行&#xff0c;内容是一样的 centOS有的指令安装不了&#xff1f;试试拓展yum源&#xff0c;再安装基本就OK啦&#xff01; yum install -y epel-release 下面是作者在centOS环境下亲测可以使用的&#xff0c;如果你是root用户直…

查询附近500米的餐厅

前言 查询附近500米数据&#xff0c;第一反应是用ST_Buffer&#xff0c;但是ST_Buffer文档写了一句话&#xff0c;使用ST_DWithin效率更高。 ST_Buffer (postgis.net) ST_DWithin (postgis.net) 数据取点 我有一种坐标系4326的表ne_10m_admin_0_boundary_lines_land&#xf…

Camtasia2024喀秋莎微课制作神器新版本功能介绍

最近无论是b站&#xff0c;抖音&#xff0c;快手等视频软件中都有不少微课视频、电视剧解说横空出世&#xff0c;通过这些“热度”带来的收益也是无法估量的&#xff0c;很多自媒体博主月入上万惹人羡慕。 不少朋友也想在这股短视频洪流中分一碗羹&#xff0c;但又苦于技术跟不…

Python中的时间序列分析模型ARIMA

大家好&#xff0c;时间序列分析广泛用于预测和预报时间序列中的未来数据点。ARIMA模型被广泛用于时间序列预测&#xff0c;并被认为是最流行的方法之一。本文我们将学习如何在Python中搭建和评估用于时间序列预测的ARIMA模型。 ARIMA模型 ARIMA模型是一种用于分析和预测时间…

软件外包开发设计文档

软件设计文档是在软件开发过程中编写的一个关键文档&#xff0c;用于记录系统的设计和结构。设计文档通常包含以下内容&#xff0c;希望对大家有所帮助。北京木奇移动技术有限公司&#xff0c;专业的软件外包开发公司&#xff0c;欢迎交流合作。 1.引言&#xff08;Introductio…

GD32_ADC采样+DMA多通道扫描传输

GD32_ADC采样DMA多通道扫描传输 文章目录 GD32_ADC采样DMA多通道扫描传输前言一、资源介绍二、原理1.ADC连续扫描模式2.DMA传输3.ADC内部通道 三、配置1.ADC配置2.DMA配置3.注意事项 四、计算1.分压转换2.数据转换 前言 <1>、硬件平台&#xff1a;可运行软件程序的GD32单…

年产200万件的超级工厂投产!巨头「闭环」汽车电子全产业链

随着汽车电动化程度的提升&#xff0c;汽车电子部件占整车成本比重逐步升高&#xff0c;已经从2012年的25%上升到2021年的55%。 且汽车电子电气架构向整车集中演进&#xff0c;智能汽车已经进入了软件及数据定义时代&#xff0c;底层硬件打破了过去几十年围绕特定应用不断增加…

【luckfox】3、计算重量差

前言 本章结合之前的hx711驱动&#xff0c;实现读取质量&#xff0c;记录时间及剩余质量并存入csv文件&#xff0c;计算质量差并总计。 代码 luckfox-pico\project\app\test_app\hx711\hx711_app_addtime.c #include <stdio.h> #include <stdlib.h> #include &…

文心一言 VS 讯飞星火 VS chatgpt (136)-- 算法导论11.3 2题

二、用go语言&#xff0c;假设将一个长度为r的字符串散列到m 个槽中&#xff0c;并将其视为一个以 128 为基数的数&#xff0c;要求应用除法散列法。我们可以很容易地把数 m 表示为一个 32 位的机器字&#xff0c;但对长度为r的字符串&#xff0c;由于它被当做以 128 为基数的数…

基于JavaWeb+SSM+微信小程序基金优选系统的设计和实现

基于JavaWebSSM微信小程序基金优选系统的设计和实现 源码获取入口前言主要技术系统设计功能截图Lun文目录订阅经典源码专栏Java项目精品实战案例《500套》 源码获取 源码获取入口 前言 基金优选是金融机构的核心&#xff0c;是必不可少的一个部分。在金融机构的整个服务行业中…

使用requests解决请求库Session对象设置超时的问题

在使用 Python 中的 requests 库时&#xff0c;有一个常见的问题是关于 Session 对象设置超时的功能。默认情况下&#xff0c;requests 的 Session 对象没有提供一个全局设置超时的属性&#xff0c;而是需要在每个请求中单独设置超时时间&#xff0c;或者创建一个自定义的子类来…

【PTQ】Cross-Layer Equalization跨层均衡-证明和实践详细解读

Cross-Layer Equalization跨层均衡 aimet解读 符合规则的模型结构 统一要求&#xff1a;单数据流&#xff0c;中间激活不流向其他地方概念说明&#xff1a; Conv: gruoups1的普通卷积&#xff0c;包括TransposedConv和ConvDepthwiseConv: 深度可分离卷积&#xff0c;groupsi…

AIGC实战——变分自编码器(Variational Autoencoder, VAE)

AIGC实战——变分自编码器 0. 前言1. 变分自编码器1.1 基本原理1.2 编码器 2. 构建VAE编码器2.1 Sampling 层2.2 编码器2.3 损失函数2.4 训练变分自编码器 3. 变分自编码器分析小结系列链接 0. 前言 我们已经学习了如何实现自编码器&#xff0c;并了解了自编码器无法在潜空间中…

<C++> 反向迭代器

我们知道正向迭代器的设计&#xff1a;begin迭代器指向第一个数据&#xff0c;end迭代器指向最后一个数据的下一个位置 。移向下一个数据&#xff0c;解引用得到数据的值&#xff0c;并根据容器储存方式的不同&#xff0c;容器有不同类型的迭代器。 注意&#xff1a;rbegin迭代…