需要说明的是
我的环境: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入门:读取图像以及对图像进行一些操作,比如只提取某颜色部分的东西相关推荐

  1. 同时基于c++与python版本的opencv进行读取,显示,修改,保存图片操作

    文章目录 同时基于c++与python版本的opencv进行读取,显示,修改,保存图片操作 一.基于c++的opencv 1.c++版本代码 2.代码结果展示 3.API构成及其参数说明 4.注意事项 ...

  2. OpenCV入门(3):图像的组成,色彩空间及通道的分离合并

    图像的组成 灰度:灰度使用黑色调表示物体,即用黑色为基准色,不同的饱和度的黑色来显示图像. 每个灰度对象都具有从 0%(白色)到 灰度条100%(黑色)的亮度值.灰度最高相当于最高的黑,就是纯黑.灰度 ...

  3. OPENCV入门教程十一:dilate图像膨胀

    一.目标 学习如何使用opencv中的函数,学习对图像的膨胀操作,学习dilate()函数的使用 二.函数说明 函数原型: dilate(InputArray src,OutputArray dst, ...

  4. opencv python3 找图片色块_Python 图像处理 OpenCV (3):图像属性、图像感兴趣 ROI 区域及通道处理...

    前文传送门: 图像属性 图像属性包括行数,列数和通道数,图像数据类型,像素数等. 1. 形状:shape 图像的形状可以通过 shape 关键字进行获取,使用 shape 关键的后,获取的信息包括行数 ...

  5. 转载:【OpenCV入门教程之五】 分离颜色通道多通道图像混合

    本系列文章由@浅墨_毛星云 出品,转载请注明出处. 文章链接: http://blog.csdn.net/poem_qianmo/article/details/21176257 作者:毛星云(浅墨) ...

  6. 转载:【OpenCV入门教程之四】 ROI区域图像叠加初级图像混合 全剖析

    [OpenCV入门教程之四] ROI区域图像叠加&初级图像混合 全剖析 浅墨_毛星云 2014-03-10 12:48:05 157425 收藏 19 最后发布:2014-03-10 12:4 ...

  7. [Python图像处理] 三十五.OpenCV图像处理入门、算数逻辑运算与图像融合(推荐)

    该系列文章是讲解Python OpenCV图像处理知识,前期主要讲解图像入门.OpenCV基础用法,中期讲解图像处理的各种算法,包括图像锐化算子.图像增强技术.图像分割等,后期结合深度学习研究图像识别 ...

  8. 【OpenCV入门教程之五】 分离颜色通道多通道图像混合(转)

    本系列文章由@浅墨_毛星云 出品,转载请注明出处. 文章链接: http://blog.csdn.net/poem_qianmo/article/details/21176257 作者:毛星云(浅墨) ...

  9. 【OpenCV入门教程之十三】OpenCV图像金字塔:高斯金字塔、拉普拉斯金字塔与图片尺寸缩放

    本系列文章由@浅墨_毛星云 出品,转载请注明出处. 文章链接: http://blog.csdn.net/poem_qianmo/article/details/26157633 作者:毛星云(浅墨) ...

最新文章

  1. Activity向Fragment传值
  2. golang 接口格式
  3. Redhat 5 无法安装elfutils-libelf-devel-0.137问题
  4. 微信开发接口调用(前端+.net服务端)
  5. Django从理论到实战(part19)--DTL模板语法
  6. BugkuCTF-Reverse题love
  7. IT江湖,哪个门派最挨踢?
  8. 2022年8月Python小屋编程比赛获奖名单(送5本书)
  9. 重装系统后电脑主机前面音频输出没用暨Realtek高清晰音频管理器
  10. 人工智能研究的新前线:生成式对抗网络
  11. php 星际争霸 面向对象,星际争霸之php面向对象(一)
  12. Java安全(二) 反射
  13. 项目成本管理__计划价值_挣值_实际成本三者关系与应对措施
  14. Mac 中不可错过的几款软件,相见恨晚!(基本免费)
  15. power bi -分组累计求和
  16. 手机App分发加速是如何实现的app分发有什么重要作用?cdn资源分配方式是如何分配的?
  17. html播放本地flv
  18. 老毛桃安装U盘 格式化 不可删除的部分
  19. 虚拟机Ubuntu18.04开机后一直卡在[OK] Started GNOME Display Manager处,进不去系统。
  20. Prison Break中的经典台词

热门文章

  1. 使用Microsoft Toolkit 2.5 激活windows server 2012 R2与office
  2. 职业生涯:我在阿里的一次JAVA面试经历总结(跳槽,深薪必备)
  3. MySql查询12个月份
  4. IT圈故事杂谈(5)敏捷一词的由来
  5. 2020年上海市高等学校信息技术水平考试试卷_三级_数据科学技术及应用_模拟卷_三、程序填空题_答案
  6. burpsuite WEB渗透工具的基本使用
  7. FCPose: Fully Convolutional Multi-Person Pose Estimation with Dynamic Instance-Aware Convolutions
  8. Amazon(亚马逊)2014届秋季校园招聘在线笔试题一
  9. 这辈子我碌碌无为到头一定会遗憾这一生
  10. 联想小新无线网总断问题