OpenCV、Python 图像处理一 基础、图像的存储格式

1.1  图像的读入、显示、保存

#图像读入
import cv2
img1 = cv2.imread(r'E:/python_opencv/tupian.jpg',0)
#图像显示
cv2.imshow('tupian',img1)
k = cv2.waitKey()
#图像保存
cv2.imwrite('tupian,jpg',img1)

1.2  图像的基本表示方法

分为二值图像、灰度图像、彩色图像 这三种表示方法。

二值图像:0和1表示像素点颜色,0为黑色,1为白色。

灰度图像:256个灰度级,用数值[0,255]表示,0为黑色,1为白色。

彩色图像:RGB色彩空间表示红、绿、蓝三种通道,数值均为[0,255]。但是在opencv中用BGR色彩空间表示。

不同的表示方法和色彩空间之间可以互相转换。

1.3  像素处理

像素是构成一幅图像的基本组成单位。

二值图像和灰度图像:img[0,2]表示第0行第2列的像素点。

彩色图像:opencv里img[0,2]表示第0行第2列上B、G、R三个通道的像素值,img[0,2,2]表示第0行第2列上第2个通道R的像素值。

注1:可以使用二层或三层循环嵌套,对某区域内像素值整体修改,如:

for i in range(0,50):          #i表示像素的行数
    for j in range(0,100):     #j表示像素的行数
        for k in range(0,3):   #k表示通道数
            img[i,j,k]=255     #该区域的像素值均修改为255

注2:使用Numpy库中的zeros()函数可以生成一个元素值都为0的数组,如:

import numpy as np
img = np.zeros((3,5,3),dtpye=np.uint8)

1.4  使用numpy访问像素

numpy模块中提供了item()访问像素值,itemset()修改像素值

item(i,j)或item(i,j,k)    

itemset((i,j),a) 或 itemset((i,j,k),a)   i,j为行和列,k为彩色图片中的通道,a为新值。如:

print('img.item(3,2,2)=',img.item(3,2,2))   #读取原像素值
img.itemset((3,2,2),255)   #将第3行第2列R通道的像素值修改为255

1.5  感兴趣区域(Region of Interset, ROI)

如果需要使用一张图片的某区域,可以将其定为感兴趣区域(ROI),然后就能对其整体进行操作。

A = img1[10:30,50:100]    #将img1的第10-30行像素、50-100列像素设定为ROI区域
img2[20:40,300:350] = A   #将该ROI区域赋给img2的第20-40行像素、300-350列像素

1.6  通道操作

对通道进行操作分为通道拆分和通道合并。

(一)通道拆分:

将BGR图像中的三个通道分别拆分出来。分为索引拆分方法和函数拆分方法。

索引拆分:

#拆分为B、G、R三个通道
B = img[:,:,0]
G = img[:,:,1]
R = img[:,:,2] 

函数拆分:

B,G,R = cv2.split(img)

(二)通道合并:

使用cv2.merge()函数将三个通道的灰度图像构成一幅彩色图像。

bgr = cv2.merge([b,g,r])  

1.7  获取图像属性

获取图像常用的属性,如大小、类型等。

shape 返回图像行数、列数、通道数

size 返回图像像素数

dtype 返回图像的数据类型

print('img.shape=',img.shape)   #shape 返回图像行数、列数、通道数
print('img.size=',img.size)     #size  返回图像像素数
print('img.dtype=',img.dtype)   #dtype 返回图像的数据类型

1.8图像的存储格式

在Python中使用Open CV读取一张图片后,会保存为“numpy.ndarray”格式,具体的ndarray数据结
很多人都知道一张正常的彩色图片基本都是RGB颜色模型,但是在Open CV中图像是以BGR颜色模型来存放的。
首先我们读取一张图片(为了容易说明,图像的尺寸大小仅仅为2×3,即高度为2,宽度为3的小图片),把它输出。

>>> import cv2
>>> import numpy as np
>>> img = cv2.imread("test.jpg")
1
2
3
>>> type(img)
class 'numpy.ndarray'>

>>> img.shape
(2, 3, 3)

>>> print(img)
[[[144 141 110]
  [144 141 110]
  [129 108  80]]
 [[125 122  91]
  [128 125  94]
  [109  88  60]]]
 

可以看出,img这个图片被Open CV读取后变成了“numpy.ndarray”格式,图片维度为2,3,3,第一个数字“2”代表高度为2,第二个数字“3”代表宽度,第三个数字“3”代表图片的“层数”,也就是BGR这3种颜色。

img的格式我们可以用以下结构表示:

比如输出img的结果
[[[144 141 110]
[144 141 110]
[129 108 80]]
[[125 122 91]
[128 125 94]
[109 88 60]]]

对应RGB格式:
图像第一行:
第1个像素点:110, 141, 144
第2个像素点:110, 141, 144
第3个像素点:80, 141, 129

图像第二行:
第1个像素点:91, 122, 125
第2个像素点:94, 125, 128
第3个像素点:60, 88, 109
 

如果我们想获取图像img第一行所有的像素点,可以使用:

>>> img[0]
array([[144, 141, 110],
       [144, 141, 110],
       [129, 108,  80]], dtype=uint8)

同理,第二行所有像素点:

>>> img[1]
array([[125, 122,  91],
       [128, 125,  94],
       [109,  88,  60]], dtype=uint8)
 

获取第1个像素点:

>>> img[0][0]
array([144, 141, 110], dtype=uint8)

>>> img[0, 0]
array([144, 141, 110], dtype=uint8)

获取第4个(第2行第1个)像素点:

>>> img[1, 0]
array([125, 122,  91], dtype=uint8)

>>> img[1][0]
array([125, 122,  91], dtype=uint8)

获取第一个像素点的RGB颜色的R值:

>>> img[0, 0, 2]
110
>>> img[0][0, 2]
110
>>> img[0][0][2]
110
>>> img[0, 0][2]
110


 

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
opencv;图片处理。基于SSM的美颜网站。前端采用jsp页面,人脸追踪使用tracking。图片处理使用opencv OpenCV(Open Source Computer Vision Library)是一款开源的计算机视觉库,专门为图像和视频处理任务设计,广泛应用于学术研究、工业应用以及个人项目中。以下是关于OpenCV的详细介绍: 历史与发展 起源:OpenCV于1999年由英特尔公司发起,旨在促进计算机视觉技术的普及和商业化应用。该项目旨在创建一个易于使用、高效且跨平台的库,为开发者提供实现计算机视觉算法所需的基础工具。 社区与支持:随着时间的推移,OpenCV吸引了全球众多开发者和研究人员的参与,形成了活跃的社区。目前,OpenCV由非盈利组织OpenCV.org维护,并得到了全球开发者、研究机构以及企业的持续贡献和支持。 主要特点 跨平台:OpenCV支持多种操作系统,包括但不限于Windows、Linux、macOS、Android和iOS,确保代码能够在不同平台上无缝运行。 丰富的功能:库中包含了数千个优化过的函数,涵盖了计算机视觉领域的诸多方面,如图像处理(滤波、形态学操作、色彩空间转换等)、特征检测与描述(如SIFT、SURF、ORB等)、物体识别与检测(如Haar级联分类器、HOG、DNN等)、视频分析、相机校正、立体视觉、机器学习(SVM、KNN、决策树等)、深度学习(基于TensorFlow、PyTorch后端的模型加载与部署)等。 高效性能:OpenCV代码经过高度优化,能够利用多核CPU、GPU以及特定硬件加速(如Intel IPP、OpenCL等),实现高速图像处理和实时计算机视觉应用。 多语言支持:尽管OpenCV主要使用C++编写,但它提供了丰富的API绑定,支持包括C、Python、Java、MATLAB、JavaScript等多种编程语言,方便不同领域的开发者使用。 开源与免费:OpenCV遵循BSD开源许可证发布,用户可以免费下载、使用、修改和分发库及其源代码,无需担心版权问题。 架构与核心模块 OpenCV的架构围绕核心模块构建,这些模块提供了不同层次的功能: Core:包含基本的数据结构(如cv::Mat用于图像存储和操作)、基本的图像和矩阵操作、数学函数、文件I/O等底层功能。 ImgProc:提供图像预处理、滤波、几何变换、形态学操作、直方图计算、轮廓发现与分析等图像处理功能。 HighGui:提供图形用户界面(GUI)支持,如图像和视频的显示、用户交互(如鼠标事件处理)以及简单的窗口管理。 VideoIO:负责视频的读写操作,支持多种视频格式和捕获设备。 Objdetect:包含预训练的对象检测模型(如Haar级联分类器用于人脸检测)。 Features2D:提供特征点检测(如SIFT、ORB)与描述符计算、特征匹配与对应关系估计等功能。 Calib3d:用于相机标定、立体视觉、多视图几何等问题。 ML:包含传统机器学习算法,如支持向量机(SVM)、K近邻(KNN)、决策树等。 DNN:深度神经网络模块,支持导入和运行预训练的深度学习模型,如卷积神经网络(CNN)。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

高亚奇

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值