python opencv图像处理(二)

简介: python opencv图像处理(二)

像素处理与Numpy操作以及Matplotlib显示图像

1.普通操作


1.1读取像素


读取像素可以通过行坐标和列坐标来进行访问,灰度图像直接返回灰度值,彩色图像则返回B、G、R三个分量。

需要注意的是, OpenCV 读取图像是 BGR 存储显示。


灰度图片读取操作:


import cv2 as cv
# 灰度图像读取
gray_img = cv.imread("maliao.jpg", cv.IMREAD_GRAYSCALE)
print(gray_img[20, 30])
# 显示图片
cv.imshow("gray_img", gray_img)
# 等待输入
cv.waitKey()
cv.destroyAllWindows()


对于读取灰度图像的像素值,只会返回相应的灰度。

彩色图像读取操作:


import cv2 as cv
# 彩色图像读取
color_img = cv.imread("maliao.jpg", cv.IMREAD_COLOR)
print(color_img[20, 30])
blue = color_img[20, 30, 0]
print(blue)
green = color_img[20, 30, 1]
print(green)
red = color_img[20, 30, 2]
print(red)
# 显示图片
cv.imshow("color_img", color_img)
# 等待输入
cv.waitKey()
cv.destroyAllWindows()
# 打印结果
[  3   2 236]
3
2
236

1.2修改像素


修改像素时,直接对像素赋值新像素即可。

如果是灰度图片,直接赋值即可。

如果是彩色图片,则需依次给 BGR 三个通道的像素赋值。


import cv2 as cv
# 灰度图像读取
gray_img = cv.imread("maliao.jpg", cv.IMREAD_GRAYSCALE)
print(gray_img[20, 30])
# 像素赋值
gray_img[20, 30] = 255
print(gray_img[20, 30])
# 打印结果
72
255
# 彩色图像读取
color_img = cv.imread("maliao.jpg", cv.IMREAD_COLOR)
print(color_img[20, 30])
# 像素依次赋值
color_img[20, 30, 0] = 255
color_img[20, 30, 1] = 255
color_img[20, 30, 2] = 255
print(color_img[20, 30])
# 打印结果
[  3   2 236]
[255 255 255]


如果觉得依次对 BGR 三个通道赋值有些麻烦的话,也可以通过数组直接对像素点一次赋值:


# 像素一次赋值
color_img[20, 30] = [0, 0, 0]
print(color_img[20, 30])
# 打印结果
[0 0 0]


下面是对一个区域的像素进行赋值,将这个区域的像素全都赋值成为白色:


import cv2 as cv
color_img = cv.imread("maliao.jpg", cv.IMREAD_COLOR)
color_img[50:100, 50:100] = [255, 255, 255]
cv.imshow("color_img", color_img)
cv.waitKey()
cv.destroyAllWindows()

20210623165701872.png


2.使用Numpy操作


2.1读取像素

使用 Numpy 进行像素读取,调用方式如下:


返回值 = 图像.item(位置参数)


读取灰度图像和彩色图像如下:


import cv2 as cv
# 读取灰度图像
gray_img = cv.imread("maliao.jpg", cv.IMREAD_GRAYSCALE)
print(gray_img.item(20, 30))
# 打印结果
72
# 读取彩色图像
color_img = cv.imread("maliao.jpg", cv.IMREAD_COLOR)
blue = color_img.item(20, 30, 0)
print(blue)
green = color_img.item(20, 30, 1)
print(green)
red = color_img.item(20, 30, 2)
print(red)
# 打印结果
3
2
236


2.2修改像素


修改像素需要使用到 Numpy 的 itemset() 方法,调用方式如下:

图像.itemset(位置, 新值)

下面是我将 [20, 30] 这个修改为白色的示例:


import cv2 as cv
# 读取彩色图像
color_img = cv.imread("maliao.jpg", cv.IMREAD_COLOR)
print(color_img[20, 30])
color_img.itemset((20, 30, 0), 255)
color_img.itemset((20, 30, 1), 255)
color_img.itemset((20, 30, 2), 255)
print(color_img[20, 30])
# 输出结果
[  3   2 236]
[255 255 255]


Matplotlib显示图像


我们可以通过 OpenCV 读入图像,然后使用 Matplotlib 来进行图像显示。


import cv2 as cv
from matplotlib import pyplot as plt
img=cv.imread('maliao.jpg', cv.IMREAD_COLOR)
plt.imshow(img)
plt.show()


如果我们直接使用 Matplotlib 来显示 OpenCV 读入的图像,会得到下面这个图:

这是因为对于 OpenCV 的像素是 BGR 顺序,然而 Matplotlib 所遵循的是 RGB 顺序。

解决的方案有很多种,如下:


import cv2 as cv
from matplotlib import pyplot as plt
img=cv.imread('maliao.jpg',cv.IMREAD_COLOR)
# method1
b,g,r=cv.split(img)
img2=cv.merge([r,g,b])
plt.imshow(img2)
plt.show()
# method2
img3=img[:,:,::-1]
plt.imshow(img3)
plt.show()
# method3
img4=cv.cvtColor(img, cv.COLOR_BGR2RGB)
plt.imshow(img4)
plt.show()
相关文章
|
2月前
|
算法 计算机视觉
基于qt的opencv实时图像处理框架FastCvLearn实战
本文介绍了一个基于Qt的OpenCV实时图像处理框架FastCvLearn,通过手撕代码的方式详细讲解了如何实现实时人脸马赛克等功能,并提供了结果展示和基础知识回顾。
104 7
基于qt的opencv实时图像处理框架FastCvLearn实战
|
3月前
|
计算机视觉 Windows Python
windows下使用python + opencv读取含有中文路径的图片 和 把图片数据保存到含有中文的路径下
在Windows系统中,直接使用`cv2.imread()`和`cv2.imwrite()`处理含中文路径的图像文件时会遇到问题。读取时会返回空数据,保存时则无法正确保存至目标目录。为解决这些问题,可以使用`cv2.imdecode()`结合`np.fromfile()`来读取图像,并使用`cv2.imencode()`结合`tofile()`方法来保存图像至含中文的路径。这种方法有效避免了路径编码问题,确保图像处理流程顺畅进行。
321 1
|
7天前
|
计算机视觉 开发者 Python
利用Python进行简单的图像处理
【10月更文挑战第36天】本文将引导读者理解如何使用Python编程语言和其强大的库,如PIL和OpenCV,进行图像处理。我们将从基本的图像操作开始,然后逐步深入到更复杂的技术,如滤波器和边缘检测。无论你是编程新手还是有经验的开发者,这篇文章都将为你提供新的视角和技能,让你能够更好地理解和操作图像数据。
|
1月前
|
计算机视觉 Python
python利用pyqt5和opencv打开电脑摄像头并进行拍照
本项目使用Python的PyQt5和OpenCV库实现了一个简单的摄像头应用。用户可以通过界面按钮打开或关闭摄像头,并实时预览视频流。点击“拍照”按钮可以捕捉当前画面并保存为图片文件。该应用适用于简单的图像采集和处理任务。
100 0
python利用pyqt5和opencv打开电脑摄像头并进行拍照
|
1月前
|
机器学习/深度学习 算法 计算机视觉
【Python篇】Python + OpenCV 全面实战:解锁图像处理与视觉智能的核心技能
【Python篇】Python + OpenCV 全面实战:解锁图像处理与视觉智能的核心技能
68 2
|
2月前
|
机器学习/深度学习 计算机视觉 Python
opencv环境搭建-python
本文介绍了如何在Python环境中安装OpenCV库及其相关扩展库,包括numpy和matplotlib,并提供了基础的图像读取和显示代码示例,同时强调了使用Python虚拟环境的重要性和基本操作。
|
1月前
|
算法 数据可视化 计算机视觉
Python中医学图像处理常用的库
在Python中,医学图像处理常用的库包括:ITK(及其简化版SimpleITK)、3D Slicer、Pydicom、Nibabel、MedPy、OpenCV、Pillow和Scikit-Image。这些库分别擅长图像分割、配准、处理DICOM和NIfTI格式文件、图像增强及基础图像处理等任务。选择合适的库需根据具体需求和项目要求。
46 0
|
1月前
|
数据挖掘 计算机视觉 Python
基于Python的简单图像处理技术
【10月更文挑战第4天】在数字时代,图像处理已成为不可或缺的技能。本文通过Python语言,介绍了图像处理的基本方法,包括图像读取、显示、编辑和保存。我们将一起探索如何使用PIL库进行图像操作,并通过实际代码示例加深理解。无论你是编程新手还是图像处理爱好者,这篇文章都将为你打开一扇新窗,让你看到编程与创意结合的无限可能。
WK
|
3月前
|
计算机视觉 Python
如何使用OpenCV进行基本图像处理
使用OpenCV进行基本图像处理包括安装OpenCV,读取与显示图像,转换图像颜色空间(如从BGR到RGB),调整图像大小,裁剪特定区域,旋转图像,以及应用图像滤镜如高斯模糊等效果。这些基础操作是进行更复杂图像处理任务的前提。OpenCV还支持特征检测、图像分割及对象识别等高级功能。
WK
49 4
|
3月前
|
计算机视觉 开发者 Python
使用Python进行简单图像处理
【8月更文挑战第31天】 本文将介绍如何使用Python编程语言来处理图像。我们将通过代码示例来展示如何读取、显示、编辑和保存图像文件。无论你是编程新手还是有一定经验的开发者,这篇文章都将为你提供一个清晰的指引,帮助你开始自己的图像处理项目。