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 # 打印出像素值,BGR图片显示【B,G,R】值
12 print px
13
14 # 第三个参数0,1,2分别代表B,G,R
15 blue=img[100,100,0]
16 green=img[100,100,1]
17 red=img[100,100,2]
18
19 print blue
20 print green
21 print red
22
23 # 打印结果:
24 # [143 152 161]
25 # 143
26 # 152
27 # 161
28
29 # 类似的方式可以用于修改像素值
30 img[100,100]=[255,255,255]
31 print img[100,100]
32 # 打印结果:[255 255 255]
33
34 # 效率更快的方法,numpy中这些方法经过快速矩阵运算的优化
35 # 显示[10,10]位置的R值
36 print img.item(10,10,2)
37 # 修改它并显示
38 img.itemset((10,10,2),200)
39 print img.item(10,10,2)
40 #打印结果:
41 # 108
42 # 200

  注意:

    Numpy 是经过优化了的进行快速矩阵运算的软件包。所以我们不推荐逐个获取像素值并修改,这样会很慢,能有矩阵运算就不要用循环。

  对于获取每一个像素值,也许使用Numpy 的array.item() 和array.itemset() 会更好。但是返回值是标量。如果你想获得所有B,G,R 的值,

  你需要使用array.item() 分割他们。

获取图像的属性(信息)


  • 图像的属性包括:行,列,通道,图像数据类型,像素数目等。
  • img.shape 可以获取图像的形状。
  • 他的返回值是一个包含行数,列数,通道数的元组。
  • img.size返回像素点总数
  • img.dtype 返回的是图像的数据类型.

  看代码:

 1 import cv2
 2 import numpy as np
 3
 4 # 首先打开一张图片
 5 img=cv2.imread(‘Koala.jpg‘)
 6
 7 #图像形状
 8 print img.shape
 9 ## (384L, 512L, 3L)
10
11 # 像素的数量
12 print img.size
13 ## 589824
14
15 # 图像的数据类型
16 print img.dtype
17 ## uint8

图像ROI


  • 有时候我们需要对一幅图像的特定区域进行操作。
  • 例如我们要检测一副图像中眼睛的位置,我们首先应该在图像中找到脸,再在脸的区域中找眼睛,而不是直接在一幅图像中搜索。
  • 这样会提高程序的准确性和性能。ROI 也是使用Numpy 索引来获得的。

参照PDF中的一个例子,直接拿过来:

 1 import cv2
 2 import numpy as np
 3 img=cv2.imread(‘/home/duan/workspace/opencv/images/roi.jpg‘)
 4
 5 ball=img[280:340,330:390]
 6 img[273:333,100:160]=ball
 7
 8 cv2.imshow(‘image‘,img)
 9 cv2.waitKey(0)
10 cv2.destroyAllWindows()

结果:图中的球的部分整体复制一块到其他位置

图像通道的拆分及合并



未完成,待续。。。。。

  

时间: 2024-10-12 12:16:35

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

图像的基础操作

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通

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