opencv初步学习——图像处理2

ops/2025/3/20 14:19:10/

        这一部分主要讲解如何初步地创建一个图像,以及彩色图像我们的一些基本处理方法

一、创建一个灰度图像

1-1、zeros()函数  [NumPy库]

        要用到这一个函数,首先我们需要调用我们的NumPy库,这一个函数的作用是可以帮助我们生成一个元素值都是0的二维数组,如果我们把这些数据放到一张图片里面去,那么就对应着我们的一个黑色图像。当然我们也可以通过修改数组中的数字大小来改变图像的颜色(但还是灰度图像)

        (1)构成

                该函数的具体构成如下:

python">numpy.zeros(shape, dtype=float, order='C')  

                shape:即我们需要设置的二维数组(元组或者列表)的大小

                dtype:即我们需要设置的元组里面的数据的类型,一般默认为float;当然我们也可以变为其他(比如我们的int,bool);当然实际在写的时候可以不写dtype = ~~ 

                order:这个跟存储有关,暂且不做介绍(因为我也不知道哈)


1-2、生成 

  (1)正确示范:

python">import cv2
import numpy as npimg = np.zeros((80,80),dtype=np.uint8)img[40,40] = 255cv2.imshow("one",img)
cv2.waitKey()
cv2.destroyAllWindows()

                于是我们生成的图像如下:
 

                可以看到我们在中间修改成了一个白点

                此外我们也可以使用切片来帮助我们更好地进行操作

  (2)可能会错误的操作

          1、没有 np. 前缀

                  这个现象代码如下:

python">img = np.zeros((80,80),uint8)

                  为什么直接写uint8不可以呢,因为python里面是没有内置这些数据类型的,这些数据类型只在NumPy里面有,所以如果我们想要去引用这些数据类型我们需要加上我们的np.前缀:(前面已经设置NumPy为np了)

python">img = np.zeros((80,80),np.uint8)

              2、直接使用int 

                       这个现象的代码如下:

python">img = np.zeros((80,80,80),dtype=int)

                       在 NumPy 里,int 一般是指 np.int32 或者 np.int64(这取决于你的系统),不过 OpenCV 的 cv2.imshow 函数不支持 CV_32S(32 位有符号整数)这类数据类型用于图像显示。此函数要求输入的图像数据类型为 CV_8U(8 位无符号整数),也就是 np.uint8 类型。



二、彩色图像的简单处理 

1-1、基础知识

        在opencv中的彩色图像是以BGR模式的三维数组的形式进行存储的,例如:

python">img = [0,0,0]

        第一个0指第0行;第二个0指0列;第三个0指的是第0个颜色通道(B,蓝色)

        0、1、2分别对应BGR(蓝色、绿色、红色)


1-2、简单的颜色修改

        例如我们现在还是采用如下图片:

        我们可以进行如下操作:

python">import cv2
img = cv2.imread("D:\\photo\\mountain.png")img[300:440 , 0:100 , 0:3] = 255cv2.imshow("one",img)
cv2.waitKey()
cv2.destroyAllWindows()

         由于我们现在是彩色图像采取的是BGR三通道,那么我们这里的操作就是把300行到440行,0列到100列的三个通道全部设置为255,即我们的每个像素点的三个通道的值为(255,255,255),那么就会变成白色。具体显示出来的结果如下;

        当然我们还可以这么处理:

python">import cv2
img = cv2.imread("D:\\photo\\mountain.png")img[300:440 , 0:100 ] = (0,0,255)
img[300:440 , 100:200 ] = (0,255,0)
img[300:440 , 200:300 ] = (255,0,0)cv2.imshow("one",img)
cv2.waitKey()
cv2.destroyAllWindows()

        这样即对每一个在我们指定区域的像素点的BGR通道进行修改,结果如下:

         总结:在彩色图像中,每一个像素点都有三个通道(BGR)


1-3、通道处理 

        (1)通道拆分

                在我们的opencv中,我们可以通过索引把我们的三个通道全部提取出来:

python">b = img[:,:,0]
g = img[:,:,1]
r = img[:,:,2]

                此时如果我们再去用cv2.imshow()函数将其展现出来,得到的是灰度图像,因为此时你的b、g、r中的数据只是单个通道的数据了,而不是三个通道了,这里我们就不过多地去展示。

                除了使用索引去拆分,我们还可以通过如下方式去拆分:

python">b,g,r = cv2.split(img)  这里直接分配了

        (2)通道合并

                既然我们可以拆分,那么我们也肯定可以合并,我们需要用到这个函数:

python">cv2.merge([b,g,r])

                正如上所示,你只需要将每个通道按照上面的形式摆放就可以了,当然你也不排除你把它的顺序搞反了,那么我们就很难绷了


http://www.ppmy.cn/ops/167299.html

相关文章

273.搜索旋转排序数组

33. 搜索旋转排序数组 - 力扣&#xff08;LeetCode&#xff09; class Solution {public int search(int[] nums, int target) {int nnums.length;if(n0){return -1;}int left0,rightn-1;while(left<right){int mid(leftright)/2;if(nums[mid]target){return mid;}else if(…

Selenium与MySQL数据校验自动化

在使用Selenium进行UI自动化测试时,如果需要连接MySQL数据库进行数据校验,可以通过以下步骤实现: 1. 安装必要的库 首先,确保你已经安装了以下Python库: selenium:用于UI自动化。 mysql-connector-python 或 pymysql:用于连接MySQL数据库。 你可以使用以下命令安装这些…

算法刷题力扣

找到字符串唯一字符&#xff0c;因为字母只有26个&#xff0c;它们底层的存储是int类型&#xff0c;所以我们直接创建一个int类型数组&#xff0c;计算它们出现的个数&#xff0c;然后遍历s&#xff0c;判断是否等于1即可。 具体代码如下&#xff1a; class Solution { publ…

Blender选择循环边/循环面技巧

循环边和循环面都是有方向的 可以按方向选取相对应的循环边/循环面 按住ShiftAlt左键单击 竖着的边就会选择竖着的循环面 按住ShiftAlt左键单击 横着的边就会选择横着的循环面 也没人讲过这个 自己摸索出来的 , 真是踩坑无数 , 今天终于知道了...

[蓝桥杯 2023 省 B] 飞机降落(不会dfs的看过来)

[蓝桥杯 2023 省 B] 飞机降落 题目描述 N N N 架飞机准备降落到某个只有一条跑道的机场。其中第 i i i 架飞机在 T i T_{i} Ti​ 时刻到达机场上空&#xff0c;到达时它的剩余油料还可以继续盘旋 D i D_{i} Di​ 个单位时间&#xff0c;即它最早可以于 T i T_{i} Ti​ 时刻…

【云原生之kubernetes实战】在k8s环境中高效部署minio对象存储(详细教程)

【云原生之kubernetes实战】在k8s环境中高效部署minio对象存储(详细教程) 前言一、minio介绍1.1 MinIO简介1.2 主要特点1.3 主要使用场景二、相关知识介绍2.1 本次实践存储介绍2.2 k8s存储介绍三、本次实践介绍3.1 本次实践简介3.2 本次环境规划3.3 部署前需准备工作四、检查…

django小案例-2

1.项目创建 1.1 创建django项目 创建项目的命令如下&#xff1a; django-admin startproject test1 创建成功后的文件夹如下图&#xff1a; __init__.py: 说明test1是一个python包。 settings.py: 项目的配置文件。 urls.py: 进行url路由的配置。 wsgi.py: web服务器和D…

动作捕捉手套如何让虚拟现实人机交互 “触手可及”?

在虚拟与现实逐渐交融的当下&#xff0c;动作捕捉技术正以前所未有的速度革新着多个领域。 动作捕捉技术&#xff0c;简称“动捕”&#xff0c;已经从早期的影视特效制作&#xff0c;逐步拓展到游戏开发、虚拟现实、机器人控制等多个领域。 而mHandPrO数据手套作为这一领域的…