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

news2024/10/6 1:41:55

文章目录

  • 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 cv2

def 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')
    # 颜色空间转换API
    cvt_img = cv2.cvtColor(img, colorspaces[index])

    cv2.imshow('color', cvt_img)
    key = cv2.waitKey(10)
    if key & 0xff == ord('q'):
        break

cv2.destroyAllWindows()

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

题目

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

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

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

np.array

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

np.zeros

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

np.ones

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

np.full

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

np.identity

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

np.eye

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

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

在这里插入图片描述

# -*- coding: utf-8 -*-
import cv2
import numpy as np

img = np.zeros((480, 640), np.uint8)

cnt = 0
while cnt < 200:
    img[cnt, 100] = 255
    cnt += 1

cv2.imshow('img', img)
key = cv2.waitKey(0)
if key & 0xff == ord('q'):
    cv2.destroyAllWindows()

在这里插入图片描述

# -*- coding: utf-8 -*-
import cv2
import numpy as np

img = np.zeros((480, 640, 3), np.uint8)

cnt = 0
while cnt < 200:
	# BGR
    img[cnt, 100, 0] = 255
    cnt += 1

cv2.imshow('img', img)
key = cv2.waitKey(0)
if key & 0xff == ord('q'):
    cv2.destroyAllWindows()

在这里插入图片描述

# -*- coding: utf-8 -*-
import cv2
import numpy as np

img = np.zeros((480, 640, 3), np.uint8)

cnt = 0
while cnt < 200:
    img[cnt, 100] = [0, 0, 255]
    cnt += 1

cv2.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 np

img = 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 np

img = 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 np

img = 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 np

img = cv2.imread('E://pic//2.jpg')
# shape属性中包含三个信息
# 高度、长度、通道数
print(img.shape)

# 图像占用多大空间
# 高度 * 长度 * 通道数
print(img.size)

# 图像中每个元素的位深
print(img.dtype)

在这里插入图片描述

通道的分割与合并

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

# -*- coding: utf-8 -*-
import cv2
import numpy as np

img = 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] = 255

cv2.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 np

img = 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] = 255

img2 = 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.coloradmin.cn/o/1214379.html

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

相关文章

c# - - - Application.StartupPath(程序安装目录)和Environment.CurrentDirectory(程序工作目录)

Application.StartupPath 应用程序的安装目录&#xff0c;不会改变。 在C:\Users\Administrator\source\repos\ConsoleApp6\bin\Debug目录中&#xff0c;运行ConsoleApp6.exe。 安装目录为&#xff1a;C:\Users\Administrator\source\repos\ConsoleApp6\bin\Debug 在C:\Users…

Git相关: 拉取、git push提交 过程遇到的错误

目录 解决git push报错error: RPC failed; HTTP 413 curl 22 关于这个问题&#xff0c;其实千万别用gitlab,因为你怎么推送 也不可能把几G的文件推上去。 error: RPC failed; HTTP 413 curl 22 The requested URL returned error: 413 se 解决git push报错error: RPC failed;…

【外汇天眼】解析外汇交易平台:深度了解DD与NDD两大模式

外汇交易平台种类繁多&#xff0c;涵盖不同的分类与运营模式&#xff0c;令投资者难以甄别&#xff0c;也增加了选择的难度。为了解决这一问题&#xff0c;我们将更深入地了解外汇平台的多样性。 在线外汇交易平台主要分为两大类&#xff1a;处理平台模式&#xff08;Dealing …

springcloud仓库管理系统源码

开发技术&#xff1a; jdk1.8&#xff0c;mysql5.7&#xff0c;idea&#xff0c;nodejs&#xff0c;vscode springcloud springboot mybatis vue elementui 功能介绍&#xff1a; 统计分析&#xff1a;查看产品&#xff0c;销售数量&#xff1b;统计近7日出入库统计 客户管…

RHCE8 资料整理(六)

RHCE8 资料整理 第 6 篇 软件管理第 23 章 用rpm管理软件23.1 rpm查询23.2 rpm卸载23.3 软件包升级23.4 rpm验证 第 24 章 用yum/dnf管理软件包24.1 yum架构介绍24.2 用光盘搭建yum源24.3 创建私有仓库24.4 yum客户端配置24.5 yum基本使用24.5.1 查询24.5.2 安装与卸载24.5.3 下…

ETL数据转换工具类型与适用场景

ETL数据转换工具在企业数据管理中扮演着重要的角色&#xff0c;能够帮助企业从多个数据源中提取、转换和加载数据&#xff0c;实现数据整合和分析。以下是针对Kettle、DataX和ETLCloud这几个工具的详细介绍及其适用场景。 Kettle&#xff08;Pentaho Data Integration&#xf…

提高生存能力的7个关键技巧!

作为一款备受热议和玩家喜爱的多人在线射击游戏&#xff0c;《绝地求生》中生存能力的提高是取得胜利的关键。在这篇实用干货分享中&#xff0c;我们将详细说明7个关键技巧&#xff0c;帮助你在游戏中提高生存能力&#xff0c;获得更多胜利。 1.选择降落点&#xff1a;选择适合…

【Azure 架构师学习笔记】-Azure Storage Account(6)- File Layer

本文属于【Azure 架构师学习笔记】系列。 本文属于【Azure Storage Account】系列。 接上文 【Azure 架构师学习笔记】-Azure Storage Account&#xff08;5&#xff09;- Data Lake layers 前言 上一文介绍了存储帐户的概述&#xff0c;还有container的一些配置&#xff0c;在…

【C++】深拷贝与浅拷贝

1、深拷贝与浅拷贝 当我们对复杂类型(结构体或者类)的对象进行初始化时&#xff0c;如果将同类型的对象A赋值给同类型的对象B&#xff0c;此时就涉及深拷贝和浅拷贝的问题。 浅拷贝&#xff1a;简单的赋值拷贝操作。把类/结构体的对象的属性原封不动的赋值给另一个同类型的对…

数据库进阶教学——索引

目录 一、索引概述 1、介绍 2、演示 3、优缺点 二、索引结构 1、B树 2、Hash 三、索引分类 四、索引语法 1、语法 2、示例 五、SQL性能分析 1、SQL执行频率 2、慢查询日志 3、profile详情 4、explain执行计划 六、索引使用 七、索引设计原则 一、索引概述 …

【android】install android NDK

目录 1 下载NDK 2 解压 3 android-ndk的配置 1 下载NDK 下载网址&#xff1a;NDK 下载 | Android NDK | Android Developers 如果没有所需要的版本&#xff0c;则点击页面下面 不受支持的 NDK 下载需要的版本。 2 解压 将压缩文件&#xff08;例如 android-ndk-r25c-…

Hoppscotch:开源 API 开发工具,快捷实用 | 开源日报 No.77

hoppscotch/hoppscotch Stars: 56.1k License: MIT Hoppscotch 是一个开源的 API 开发生态系统&#xff0c;主要功能包括发送请求和获取实时响应。该项目具有以下核心优势&#xff1a; 轻量级&#xff1a;采用简约的 UI 设计。快速&#xff1a;实时发送请求并获得响应。支持多…

【机器学习基础】多元线性回归(适合初学者的保姆级文章)

&#x1f680;个人主页&#xff1a;为梦而生~ 关注我一起学习吧&#xff01; &#x1f4a1;专栏&#xff1a;机器学习 欢迎订阅&#xff01;后面的内容会越来越有意思~ &#x1f4a1;往期推荐&#xff1a; 【机器学习基础】机器学习入门&#xff08;1&#xff09; 【机器学习基…

知虾数据分析软件:了解知虾数据分析软件提升Shopee店铺运营效果

在如今电商竞争激烈的市场中&#xff0c;了解市场趋势和产品数据是成功经营一家Shopee店铺的重要因素之一。而知虾——Shopee生意参谋作为一款功能强大的数据分析软件&#xff0c;可以帮助店主深入了解行业概况、产品潜力以及市场趋势&#xff0c;从而制定最优的运营策略。本文…

大型语言模型与知识图谱融合方法概述

背景意义 大型语言模型&#xff08;LLM&#xff09;已经很强了&#xff0c;但还可以更强。通过结合知识图谱&#xff0c;LLM 有望解决缺乏事实知识、幻觉和可解释性等诸多问题&#xff1b;而反过来 LLM 也能助益知识图谱&#xff0c;让其具备强大的文本和语言理解能力。而如果…

一加手机全球摄影展深圳开展 历年获奖作品齐登场

11 月 18 日至 12 月 3 日&#xff0c;一加手机将携手国际摄影奖&#xff08;International Photography Awards&#xff0c;以下简称IPA&#xff09;&#xff0c;在深圳市南山区海岸城购物中心举办一加手机全球摄影展&#xff08;OnePlus Global Photography Exhibition&#…

【Vue】内置指令真的很常用!

内置指令 v-text v-text用于将一个变量的值渲染为元素的文本内容 注意v-text只能接受字符串类型的值,对于对象类型,会调用toString()方法 与插值表达式区别就是它会替换标签中的值&#xff0c;只显示它绑定的&#xff08;还是插值语法用的多~&#xff09; 语法 <元素 …

荧光量子效率积分球检测薄膜需要注意什么

荧光量子效率积分球是一种特殊的积分球&#xff0c;它可以用于测量荧光材料在特定波长下的荧光量子效率。它由一个具有高朗伯特性的漫反射材料制成&#xff0c;具有高达99%的反射率和朗伯特性。荧光量子效率积分球的使用方法包括将样品放置在积分球的样品口中&#xff0c;调整激…

Postman的Cookie鉴权

近期在复习Postman的基础知识&#xff0c;在小破站上跟着百里老师系统复习了一遍&#xff0c;也做了一些笔记&#xff0c;希望可以给大家一点点启发。 一&#xff09;什么是Cookie 定义&#xff1a;存储在客户端的一小段文本信息&#xff0c;格式为键值对的形式. 二&#xff09…

Adobe Illustrator——原创设计的宝藏软件

今天&#xff0c;我们来谈谈一款在Adobe系列中曾经多次给大家都提到的原创性极强的设计理念丰富的矢量图形编辑软件——Adobe Illustrator。 Adobe Illustrator&#xff0c;其定位是一款与Photoshop相类似对矢量图形进行编辑的软件。 Adobe Illustrator&#xff0c;作为全球最著…