图像的基础操作

1、先读取一个图片

import cv2

import numpy as np

img = cv2.imread(‘test.jpg‘)

我们可以获取该图像的属性:行,列,通道,图像数据类型,像素数目等,具体如下。

img.shape:获取图像的形状,返回值是一个包含行数,列数,通道数的元组

img.size:图像的像素数目,长乘以宽乘以通道数。

img.dtype:图像的数据类型

img[xp, yp] = [B, G. R],应该是这种形式了,想要更改该像素值,

直接给该坐标上面赋值BGR通道的值即可,当然,也可以分开赋值。如下:

img[xp, yp, 0] = B

img[xp, yp, 1] = G

img[xp, yp, 2] = R

其他方法:

对于OpenCV的图像数据结构,我们通常使用 array.item() 来获取某一范围的像素内容并使用array.itemset()设置该像素的信息,比较列表嵌套并使用for循环遍历,是非常高效的。而且,程序的可读性会更好。我们来看下面的例子。

import cv2import numpy as np

img=cv2.imread(‘test.jpg‘)

# 打印像素点(10,10)的R通道值

print(img.item(10,10,2))

# 设置像素点(10,10)的R通道为110

img.itemset((10,10,2),110)

# 打印像素点(10,10)的R通道值

print(img.item(10,10,2))

2、图像ROI

图像的数据量还是比较大的,对整张图片进行处理会影响我们的处理效率,

因此常常只对图像中我们需要的部分进行处理,也就是感兴趣区域ROI。

使用numpy索引来获得

import cv2
import numpy as np
img=cv2.imread(‘xxx.jpg‘)
ball=img[280:340,330:390]
img[273:333,100:160]=ball

3、拆分及合并图像通道

分别对BGR三个通道操作,有时候需要把独立通道的图片合成一个BGR图像。

import cv2
import numpy as np
img=cv2.imread(‘/home/duan/workspace/opencv/images/roi.jpg‘) b,g,r=cv2.split(img)
img=cv2.merge(b,g,r)
或者import cv2
import numpy as np
img=cv2.imread(‘/home/duan/workspace/opencv/images/roi.jpg‘) b=img[:,:,0]

假如你想使所有像素的红色通道值都为 0,你不必先拆分再赋值。你可以

直接使用 Numpy 索引,这会更快。

import cv2
import numpy as np
img=cv2.imread(‘/home/duan/workspace/opencv/images/roi.jpg‘)
img[:,:,2]=0

警告:cv2.split() 是一个比较耗时的操作。只有真正需要时才用它,能用

Numpy 索引就尽量用。

4、为图像扩边(填充)

如果你想在图像周围创建一个边,就像相框一样,你可以使用 cv2.copyMakeBorder()

函数。这经常在卷积运算或 0 填充时被用到。这个函数包括如下参数:

• src 输入图像

• top, bottom, left, right 对应边界的像素数目。

• borderType 要添加那种类型的边界,类型如下

– cv2.BORDER_CONSTANT 添加有颜色的常数值边界,还需要

下一个参数(value)。

– cv2.BORDER_REFLECT 边界元素的镜像。比如: fedcba|abcde

fgh|hgfedcb

– cv2.BORDER_REFLECT_101 or cv2.BORDER_DEFAULT

跟上面一样,但稍作改动。例如: gfedcb|abcdefgh|gfedcba

– cv2.BORDER_REPLICATE 重复最后一个元素。例如: aaaaaa|

abcdefgh|hhhhhhh

– cv2.BORDER_WRAP 不知道怎么说了, 就像这样: cdefgh|

abcdefgh|abcdefg

• value 边界颜色,如果边界的类型是 cv2.BORDER_CONSTANT

原文地址:https://www.cnblogs.com/h694879357/p/12271329.html

时间: 2024-10-15 18:50:21

图像的基础操作的相关文章

python_Opencv_图像的基础操作

目标 获取像素值并修改 获取图像的属性(信息) 图像的ROI() 图像通道的拆分及合并 几乎所有以上的操作,与Numpy 的关系都比与OpenCV 的关系更加紧密,因此熟练Numpy 可以帮助我们写出性能更好的代码. 获取像素值并修改 代码: 1 # 2 3 import cv2 4 import numpy as np 5 6 # 首先打开一张图片 7 img=cv2.imread('Koala.jpg') 8 9 # 在图片中获取一个像素点 10 px=img[100,100] 11 # 打

WinForm之BindingSource基础操作实例教程

通常我们在进行数据绑定的时候,常用的数据源有DataSet.DataTable.BindingList<T>.还有强类型数据源.今天我们来通过实例了解一下BindingSource组建,分享给大家供大家参考借鉴之用. BindingSource的两个用途: (1)首先,它提供一个将窗体上的控件绑定到数据的间接层.这是通过将 BindingSource 组件绑定到数据源,然后将窗体上的控件绑定到 BindingSource 组件来完成的.与数据的所有进一步交互(包括导航.排序.筛选和更新)都是通

PIL基础操作

PIL基础操作 打开图片 BASE_PATH = os.path.dirname(os.path.abspath(__file__)) file_path = os.path.join(BASE_PATH, "fj.jpg") # 打开图片 img = Image.open(file_path) """ format : 识别图像的源格式,如果该文件不是从文件中读取的,则被置为 None 值. size : 返回的一个元组,有两个元素,其值为象素意义上的宽

vsphere基础操作-网络

一.vsphere网络操作 概念: portgroup:通信端口组.在vsphere中,一共包含三种端口组. 1)管理网络:management network,可以理解为EXSI主机的管理IP地址.每个EXSI必须配置一个管理网络IP,使得vc能够管理到exsi.每个EXSI只能有一个唯一的管理网络. 2)内核:vmkernel,可以理解为EXSI的后端IP,使得后端各项功能能够实现.这里所说的后端功能指的是EXSI之间的通讯以实现VMOTION等高级功能.连入ISCSI或NAS等存储.FT功

Mysql安装和基础操作

1.环境检查: 先检查是否已经安装了:rpm -qa |grep mysql ---两个都检查下,查看mysql是否安装 rpm -qa |grep MySQL若安装有可删除:rpm -e ****** 2.安装:1)安装前准备:mkdir usr/mysql cd进入该目录,上传安装包到/usr/mysql目录下2)安装:rpm -ivh MySQL-server-5.0.16-0.i386.rpm rpm -ivh MySQL-elient-5.0.16-0.i386.rpm3)验证安装是否

双向链表的基础操作(C++实现)

★C++实现双向链表的基础操作(类的实现) #include<iostream> #include<cassert> using namespace std; typedef int DataType; class double_link_list {                        //定义双向链表类,包括了双向的前驱和后继指针,以及对象的初始化 public: friend class ListNode; double_link_list(DataType x =

数据结构-线性表的一些基础操作 c++代码

//线性表的顺序存储结构 template <class T> class Linearlist { public: Linearlist(int MaxListSize == 10); ~Linearlist() { delete []element; } bool IsEmpty() const { return length == 0; } bool IsFull() const { return length == MaxSize; } int Length() const { ret

php之文件基础操作

在php中对文件的基础操作非常的简单,php提供的函数粗略的用了一遍. file_get_contents():可以获取文件的内容获取一个网络资源的内容,这是php给我封装的一个比较快捷的读取文件的内容.网络资源的函数,此函数里面封装了对文件的打开,读取,关闭操作.一次性的将内容全部读取到内存中,相当方便,但是对于大文件或者网络资源较大的时候,不建议使用.file_put_contents():写入数据,和file_get_contents()类似. 文件的基础操作:touch()--新建,fo

环境变量,属性文件,文件基础操作,目录基础操作,遍历指定后缀名文件

环境变量和属性 环境变量相关: 1.得到某个/所有环境变量的值 2.设置环境变量的值 3.列出全部系统属性名 import java.util.Enumeration; import java.util.Map; import java.util.Map.Entry; import java.util.Properties; public class Environment { public static void main(String[] args) { // TODO Auto-gener