OpenCV入门:读取图像以及对图像进行一些操作,比如只提取某颜色部分的东西
需要说明的是
我的环境:Anaconda下的Spyder,使用的模块是OpenCV(4.2.0)+numpy(1.15.1)
我下面的代码运用的图片是下面这只猫 (cat1.jpg) 还有一辆车 (car_blue.jpg)
cat1.jpg | car_blie.jpg |
---|---|
- 代码1:读取图片、保存图片以及计算运行所需要的时间
# =============================================================================
# 代码1
# 读取图片、保存图片以及计算运行所需要的时间
# =============================================================================
import numpy as np
import cv2
start = cv2.getTickCount() # 得到电脑启动以来的时钟周期数
img = cv2.imread('./openCV/img/cat1.jpg', 0) #灰度图,img只有一个值
cv2.imshow('image',img)
k = cv2.waitKey(0) & 0xFF
if k == 27: # 键盘敲ESC:不保存退出cv2.destroyAllWindows()
elif k == ord('s'): # 键盘敲s:保存图片并退出cv2.imwrite('messigray.png', img)cv2.destroyAllWindows()
end = cv2.getTickCount() # 返回电脑的主频
print((end - start) / cv2.getTickFrequency()) # 代码运行总时间
- 代码2:对图片进行简单的操作(eg:获取某个点的像素值、获取图片的图片的大小和通道数)
# =============================================================================
# 代码2
# 对图片进行简单的操作
# =============================================================================
import numpy as np
import cv2
img = cv2.imread('./openCV/img/cat1.jpg', 1) # 彩色图(B,G,R)print(img.shape) # 行数(高度)、列数(宽度)和通道数
# (183, 275, 3)
height, width, channels = img.shape # 获取图片的大小和通道数
print(img.dtype) # 获取图片数据类型
# uint8
print(img.size) # 获取图片总像素点
# 150975( = 183 * 275 * 3)print(img[100, 90, 0]) # 只获取蓝色blue通道的值:186
print(img.item(100, 90, 0)) # 只获取蓝色blue通道的值, 这个性能更好
print(img[100, 90]) # 获取某个点的BGR通道值
# 修改像素值
img[100, 90] = [255, 255, 255]
print(img[100, 90])
img.itemset((100, 90, 0),186) # 这个只能一个一个的修改BGR通道的值
print(img[100, 90])
# 注意:修改图片像素只是内存中的img像素点值变了,因为没有保存,所以原图并没有更改。# 截取脸部ROI
face = img[50:125, 91:195]
cv2.imshow('face', face)
cv2.waitKey(0)
k = cv2.waitKey(0) & 0xFF
if k == 27: # 键盘敲ESC:不保存退出cv2.destroyAllWindows()
elif k == ord('s'): # 键盘敲s:保存图片并退出cv2.imwrite('messigray.png', img)cv2.destroyAllWindows()b, g, r = cv2.split(img)
img = cv2.merge((b, g, r))# split()函数比较耗时,更高效的方式是用numpy中的索引
b = img[:, :, 0] #蓝色通道
g = img[:, :, 1] #绿色通道
r = img[:, :, 2] #红色通道
- 代码3: 颜色空间转换
# =============================================================================
# 代码3
# 颜色空间转换
# =============================================================================
import cv2
img = cv2.imread('E:/qwy/project/openCV/img/cat1.jpg', 1) # 彩色图(B,G,R)
img_gray = cv2.cvtColor(img, cv2.COLOR_BGR2GRAY) # BGR↔Gray
img_hsv = cv2.cvtColor(img, cv2.COLOR_BGR2HSV) # BGR↔HSV
cv2.imshow('img', img)
cv2.imshow('gray', img_gray)
cv2.imshow('hsv', img_hsv)
cv2.waitKey(0)
if k == 27: # 键盘敲ESC:不保存退出cv2.destroyAllWindows()
elif k == ord('s'): # 键盘敲s:保存图片并退出cv2.imwrite('messigray.png', img)cv2.destroyAllWindows()
代码3运行后的结果, 如下图:
关于颜色转换,需要注意的是:、
1.在 OpenCV 的 HSV 格式中,
H(色彩/色度)的取值范围是 [0,179],
S(饱和度)的取值范围 [0,255],
V(亮度)的取值范围 [0,255]。但是
不同的软件使用的值可能不同
。所以当你拿 OpenCV 的 HSV 值与其他软件的 HSV 值对比时,一定要记得归一化
。2. 获取所有的转换模式
lags = [i for i in dir(cv2) if i.startswith(‘COLOR_’)]
print(flags)
- 代码4:只提取蓝色部分
# =============================================================================
# 代码4
# 练习:只提取蓝色部分
# =============================================================================
import cv2
import numpy as np
img = cv2.imread('E:\qwy\project\openCV\img\car_blue.jpg')
hsv = cv2.cvtColor(img, cv2.COLOR_BGR2HSV) # BGR↔HSV
H, S, V = cv2.split(hsv) # 分离 HSV 三通道
#设定蓝色的阀值
lower_blue = np.array([100, 43, 46])
upper_blue = np.array([124, 255, 255])
#根据阀值构建掩模
mask = cv2.inRange(hsv,lower_blue,upper_blue)
#对原图和掩模进行位运算
res = cv2.bitwise_and(img,img,mask,mask)
cv2.imshow('img', img)
cv2.imshow('mask', mask)
cv2.imshow('res', res)
k = cv2.waitKey()
if k == 27: # 键盘敲ESC:不保存退出cv2.destroyAllWindows()
elif k == ord('s'): # 键盘敲s:保存图片并退出cv2.imwrite('messigray.png', img)cv2.destroyAllWindows()
img | mask | res |
---|---|---|
关于提取图片中某个颜色的部分,可以参考这张表:
修改的代码主要是:
# 设定蓝色的阀值
lower_blue = np.array([100, 43, 46])
upper_blue = np.array([124, 255, 255])
# 根据阀值构建掩模
mask = cv2.inRange(hsv,lower_blue,upper_blue)
OpenCV入门:读取图像以及对图像进行一些操作,比如只提取某颜色部分的东西相关推荐
- 同时基于c++与python版本的opencv进行读取,显示,修改,保存图片操作
文章目录 同时基于c++与python版本的opencv进行读取,显示,修改,保存图片操作 一.基于c++的opencv 1.c++版本代码 2.代码结果展示 3.API构成及其参数说明 4.注意事项 ...
- OpenCV入门(3):图像的组成,色彩空间及通道的分离合并
图像的组成 灰度:灰度使用黑色调表示物体,即用黑色为基准色,不同的饱和度的黑色来显示图像. 每个灰度对象都具有从 0%(白色)到 灰度条100%(黑色)的亮度值.灰度最高相当于最高的黑,就是纯黑.灰度 ...
- OPENCV入门教程十一:dilate图像膨胀
一.目标 学习如何使用opencv中的函数,学习对图像的膨胀操作,学习dilate()函数的使用 二.函数说明 函数原型: dilate(InputArray src,OutputArray dst, ...
- opencv python3 找图片色块_Python 图像处理 OpenCV (3):图像属性、图像感兴趣 ROI 区域及通道处理...
前文传送门: 图像属性 图像属性包括行数,列数和通道数,图像数据类型,像素数等. 1. 形状:shape 图像的形状可以通过 shape 关键字进行获取,使用 shape 关键的后,获取的信息包括行数 ...
- 转载:【OpenCV入门教程之五】 分离颜色通道多通道图像混合
本系列文章由@浅墨_毛星云 出品,转载请注明出处. 文章链接: http://blog.csdn.net/poem_qianmo/article/details/21176257 作者:毛星云(浅墨) ...
- 转载:【OpenCV入门教程之四】 ROI区域图像叠加初级图像混合 全剖析
[OpenCV入门教程之四] ROI区域图像叠加&初级图像混合 全剖析 浅墨_毛星云 2014-03-10 12:48:05 157425 收藏 19 最后发布:2014-03-10 12:4 ...
- [Python图像处理] 三十五.OpenCV图像处理入门、算数逻辑运算与图像融合(推荐)
该系列文章是讲解Python OpenCV图像处理知识,前期主要讲解图像入门.OpenCV基础用法,中期讲解图像处理的各种算法,包括图像锐化算子.图像增强技术.图像分割等,后期结合深度学习研究图像识别 ...
- 【OpenCV入门教程之五】 分离颜色通道多通道图像混合(转)
本系列文章由@浅墨_毛星云 出品,转载请注明出处. 文章链接: http://blog.csdn.net/poem_qianmo/article/details/21176257 作者:毛星云(浅墨) ...
- 【OpenCV入门教程之十三】OpenCV图像金字塔:高斯金字塔、拉普拉斯金字塔与图片尺寸缩放
本系列文章由@浅墨_毛星云 出品,转载请注明出处. 文章链接: http://blog.csdn.net/poem_qianmo/article/details/26157633 作者:毛星云(浅墨) ...
最新文章
- Activity向Fragment传值
- golang 接口格式
- Redhat 5 无法安装elfutils-libelf-devel-0.137问题
- 微信开发接口调用(前端+.net服务端)
- Django从理论到实战(part19)--DTL模板语法
- BugkuCTF-Reverse题love
- IT江湖,哪个门派最挨踢?
- 2022年8月Python小屋编程比赛获奖名单(送5本书)
- 重装系统后电脑主机前面音频输出没用暨Realtek高清晰音频管理器
- 人工智能研究的新前线:生成式对抗网络
- php 星际争霸 面向对象,星际争霸之php面向对象(一)
- Java安全(二) 反射
- 项目成本管理__计划价值_挣值_实际成本三者关系与应对措施
- Mac 中不可错过的几款软件,相见恨晚!(基本免费)
- power bi -分组累计求和
- 手机App分发加速是如何实现的app分发有什么重要作用?cdn资源分配方式是如何分配的?
- html播放本地flv
- 老毛桃安装U盘 格式化 不可删除的部分
- 虚拟机Ubuntu18.04开机后一直卡在[OK] Started GNOME Display Manager处,进不去系统。
- Prison Break中的经典台词
热门文章
- 使用Microsoft Toolkit 2.5 激活windows server 2012 R2与office
- 职业生涯:我在阿里的一次JAVA面试经历总结(跳槽,深薪必备)
- MySql查询12个月份
- IT圈故事杂谈(5)敏捷一词的由来
- 2020年上海市高等学校信息技术水平考试试卷_三级_数据科学技术及应用_模拟卷_三、程序填空题_答案
- burpsuite WEB渗透工具的基本使用
- FCPose: Fully Convolutional Multi-Person Pose Estimation with Dynamic Instance-Aware Convolutions
- Amazon(亚马逊)2014届秋季校园招聘在线笔试题一
- 这辈子我碌碌无为到头一定会遗憾这一生
- 联想小新无线网总断问题