处理灰度图片

读入图像
OpenCV可以读入不同类型的图像 (PNG, JPG, etc)。可以上传灰度图片、彩色图片或者带Alpha通道的图片。使用cv2.imread()函数,语法规则见下:

retval = cv2.imread( filename [, flags])

retval:成功载入的图片,否则为None。当路径不对或者图片损坏时会发生。
该函数有一个必须的输入参数和一个可选择参数。
1、filename:可以是绝对路径,也可以是相对路径。这是必须传入的参数
2、Flags:这个参数用来表示用哪种特定格式读入一张图片(如,灰度/彩色/带有alpha通道)。这是一个可选参数,默认值为cv2.IMREAD_COLOR1,代表作为彩色图片载入。
Flags
1、cv2.IMREAD_GRAYSCALE0:以灰度模式载入图片。
2、cv2.IMREAD_COLOR1:以彩图模式载入图片,图片的透明度会被忽略,这是默认值。
3、cv2.IMREAD_UNCHANGED-1:包含alpha通道载入图片
OpenCV Documentation
Imread:https://docs.opencv.org/4.5.1/d4/da8/group__imgcodecs.html#ga288b8b3da0892bd651fce07b3bbd3a56
ImreadModes:https://docs.opencv.org/4.5.1/d8/d6a/group__imgcodecs__flags.html#ga61d9b0126a3e57d9277ac48327799c80

import cv2
import numpy as np
import matplotlib.pyplot as plt
# Read image as gray scale
cb_img = cv2.imread('checkerboard_18x18.png', 0)
# Print the image data (pixel values), element of a 2D numpy array
# Each pixel value is 8-bit2 [0, 255]
print(cb_img)


打印图片属性

# Print the size of image
print('Image size is ', cb_img.shape)
# Print data-type of image
print('Data type of image is ', cb_img.dtype)'''
Image size is  (18, 18)
Data type of image is  uint8
'''

用matplotlib展示图片

# Display image.
plt.imshow(cb_img)


尽管图片以灰度图片的方式被读入,当使用imshow()的时候不一定按照灰度图的方式展示。matplotlib使用不同的color map,可能没有设置灰度color map。

# Set color map to gray scale for proper rendering.
plt.imshow(cb_img, cmap='gray')


另一实例

# Read images as gray scale.
cb_img_fuzzy = cv2.imread("checkerboard_fuzzy_18x18.jpg", 0)# Print image.
print(cb_img_fuzzy)# Display image.
plt.imshow(cb_img_fuzzy, cmap='gray')


处理彩色图片

读入和展示图片

# Read in image.
coke_img = cv2.imread("coca-cola-logo.png", 1)# Print the size of image
print("Image size is ", coke_img.shape)# Print data-type of image
print("Data type of image is" , coke_img.dtype)'''
Image size is  (700, 700, 3)
Data type of image is uint8
'''#Display the Image
plt.imshow(coke_img)


展示出的图片与真实图片颜色不同。因为matplotlib用RGB格式展示图片,但是OpenCV以BGR的格式保存图片。因此,为了正确展示图片,需要调整一下图片的通道顺序。

coke_img_channels_reversed = coke_img[:, :, ::-1]
plt.imshow(coke_img_channels_reversed)


分离和混合图片通道
cv2.split() 把一个多通道数组分离成几个单通道数组。
cv2.merge() 把几个通道融合成一个多通道数组。所有输入的矩阵需为相同大小。

# Split the image into the B,G,R components
img_NZ_bgr = cv2.imread("New_Zealand_Lake.jpg", cv2.IMREAD_COLOR)
b, g, r = cv2.split(img_NZ_bgr)# Show the channels
plt.figure(figsize = [20, 5])
plt.subplot(141);plt.imshow(r,cmap='gray');plt.title("Red Channel");
plt.subplot(142);plt.imshow(g,cmap='gray');plt.title("Green Channel");
plt.subplot(143);plt.imshow(b,cmap='gray');plt.title("Blue Channel");# Merge the individual channels into a BGR image
imgMerged = cv2.merge((b,g,r))
# Show the merged output
plt.subplot(144);plt.imshow(imgMerged[:,:,::-1]);plt.title("Merged Output");


转换到不同的色彩空间
cv2.cvtColor() 把一张图片从一个色彩空间转换到另一个色彩空间。这个函数把一张输入的图片从一个色彩空间转换到另一个色彩空间。注意OpenCV的默认颜色格式是BGR。一张标准的(24-bit)彩色图片的第一个byte是一个8-bit的蓝色组分,第二个byte是绿色,第三个是红色。第四、五、六个是第二个像素的蓝、绿、红……

dst = cv2.cvtColor( src, code)

dst:是与src大小、深度相同的输入图片
该函数有两个必须的输入参数
1、src:输入图片:8-bit unsigned, 16-bit unsigned (CV_16UC6),或者single-precision floating-point。
2、code:颜色空间转换代码(见 ColorConversionCodes)。
ColorConversionCodes:https://docs.opencv.org/4.5.1/d8/d01/group__imgproc__color__conversions.html#ga4e0972be5de079fed4e3a10e24ef5ef0

从BGR到RGB

# OpenCV stores color channels in a different order than most other applications (BGR vs RGB).
img_NZ_rgb = cv2.cvtColor(img_NZ_bgr, cv2.COLOR_BGR2RGB)
plt.imshow(img_NZ_rgb)


变到HSV (Hue Saturation value) 色彩空间

img_hsv = cv2.cvtColor(img_NZ_bgr, cv2.COLOR_BGR2HSV)
# Split the image into the H,S,V components
h, s, v = cv2.split(img_hsv)# Show the channels
plt.figure(figsize = [20, 5])
plt.subplot(141);plt.imshow(h,cmap='gray');plt.title("H Channel");
plt.subplot(142);plt.imshow(s,cmap='gray');plt.title("S Channel");
plt.subplot(143);plt.imshow(v,cmap='gray');plt.title("V Channel");
plt.subplot(144);plt.imshow(img_NZ_rgb);plt.title("Original");


修改单个通道

h_new = h+10
img_NZ_merged = cv2.merge((h_new,s,v))
img_NZ_rgb = cv2.cvtColor(img_NZ_merged, cv2.COLOR_HSV2RGB)# Show the channels
plt.figure(figsize = [20, 5])
plt.subplot(141);plt.imshow(h_new,cmap='gray');plt.title("H Channel");
plt.subplot(142);plt.imshow(s,cmap='gray');plt.title("S Channel");
plt.subplot(143);plt.imshow(v,cmap='gray');plt.title("V Channel");
plt.subplot(144);plt.imshow(img_NZ_rgb);plt.title("Modified");

保存图片

保存图片使用代码cv2.imwrite(),有两个参数。第一个参数是文件名,第二个参数是图片对象。
imwrite函数把图片保存在特定的文件中。图片格式基于图片扩展名来确定。一般情况下,该函数只可保存8-bit的单通道或者3通道图片(BGR的通道顺序)。

cv2.imwrite( filename img[, params])

该函数有两个必须输入参数
1、filename:可以是绝对路径,也可以是相对路径
2、img:需要保存的一张或多张图片。

# Save the image
cv2.imwrite("New_Zealand_Lake_SAVED.png", img_NZ_bgr)# Read the image as Color
img_NZ_bgr = cv2.imread("New_Zealand_Lake_SAVED.png", cv2.IMREAD_COLOR)
print("img_NZ_bgr shape is: ", img_NZ_bgr.shape)# Read the image as Grayscaled
img_NZ_gry = cv2.imread("New_Zealand_Lake_SAVED.png", cv2.IMREAD_GRAYSCALE)
print("img_NZ_gry shape is: ", img_NZ_gry.shape)>>>
img_NZ_bgr shape is:  (600, 840, 3)
img_NZ_gry shape is:  (600, 840)

对比matplotlib和OpenCV的imshow

import cv2
import matplotlib.pyplot as pltcb_img = cv2.imread("checkerboard_color.png")
coke_img = cv2.imread("coca-cola-logo.png")# Use matplotlib imshow()
plt.imshow(cb_img)
plt.title("matplotlib imshow")
plt.show()# Use OpenCV imshow(), display for 8 sec
window1 = cv2.namedWindow("w1")
cv2.imshow(window1, cb_img)
cv2.waitKey(8000) #图片停留的毫秒
cv2.destroyWindow(window1)# Use OpenCV imshow(), display for 8 sec
window2 = cv2.namedWindow("w2")
cv2.imshow(window2, coke_img)
cv2.waitKey(8000)
cv2.destroyWindow(window2)# Use OpenCV imshow(), display until any key is pressed
window3 = cv2.namedWindow("w3")
cv2.imshow(window3, cb_img)
cv2.waitKey(0)
cv2.destroyWindow(window3)window4 = cv2.namedWindow("w4")Alive = True
while Alive:# Use OpenCV imshow(), display until 'q' key is pressedcv2.imshow(window4, coke_img)keypress = cv2.waitKey(1)if keypress == ord('q'):Alive = False
cv2.destroyWindow(window4)cv2.destroyAllWindows()

OpenCV Documentation

https://docs.opencv.org/4.5.1/

OpenCV入门——基本图像操作相关推荐

  1. 图像处理-Opencv入门(3)-图像的基本运算(1)-代数运算

    一.概述 1.1 图像代数运算 图像代数运算是指两幅图像对应像素的加.减.乘.除运算,有其组合的运算成为复合代数运算. 1.2 功能 图像代数运算可以抑制噪声或消除噪声,也可以利用叠加运算合成新的图像 ...

  2. opencv入门基础——图像读取,图像显示,图像保存

    一,图像读取 如上图所示,从文件中导入图像用这个函数 retval=cv.imread(文件名,[,显示控制参数]) 显示控制参数,主要是这几个: cv.IMREAD_UNCHANGED cv.IMR ...

  3. 【OpenCV】(三)opencv入门之图像的基本操作——图像阈值分割(ostu算法)

    所谓图像分割是根据灰度.彩色.空间纹理.几何形状等特征把图像划分成若干个互不相交的区域,使得这些特征在同一区域内表现出一致性和相似性. 现有的图像分割有以下几类: 1.基于阈值分割:通过设定不同的特征 ...

  4. OpenCV入门基础操作(二)----图像像素的处理

    OpenCV入门基础操作(二)----图像像素的处理 像素处理 读取一个图像像素 修改像素值 代码案例 像素处理 读取一个图像像素 在读取图像的时候一般要用到如下的命令: 返回值=图像(位置参数), ...

  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. 【OpenCV入门教程之五】 分离颜色通道多通道图像混合(转)

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

  8. opencv入门_【OpenCV入门之十八】通过形态学操作提取水平与垂直线

    小白导读 学习计算机视觉最重要的能力应该就是编程了,为了帮助小伙伴尽快入门计算机视觉,小白准备了[OpenCV入门]系列.新的一年文章的内容进行了很大的完善,主要是借鉴了更多大神的文章,希望让小伙伴更 ...

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

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

最新文章

  1. python可以做测试软件吗_Python如何给你的程序做性能测试
  2. 12306 网站的非技术分析
  3. 如何网络推广分析新站上线后网站不收录的原因有哪些?
  4. 人的一生,有三件事情不能等
  5. java 构造方法
  6. 理解一条语句:SELECT difference(sum(value)) FROM mq_enqueue WHERE channel =~ /ActiveMQ_TEST/ AND $tim...
  7. C++ Opengl图形颜色源码
  8. 【51单片机快速入门指南】2:GPIO LED与按键
  9. 解析Pascal赋值语句(洛谷P1597题题解,Java语言描述)
  10. 麦迪逊大学计算机科学咋样,威斯康星大学麦迪逊分校计算机科学基本信息全览...
  11. python_标识符_帮助系统的使用_命名规则---python工作笔记018
  12. python生成序列_python中生成一个指定长度的列表,按1,2,3的序列生成
  13. 基于bootstrap的时间选择插件daterangepicker以及汉化方法
  14. iOS底层探索之类的结构—cache分析(下)
  15. 贝叶斯公式和共轭分布
  16. win10安装wireshark经常报“KB2999226 和 KB3118401”补丁未安装的问题
  17. twaver html5 api,TWaver版3D化学元素周期表
  18. spyder使用笔记
  19. 单链表之首尾相连,成对输出
  20. win7旗舰版 OEM KEY

热门文章

  1. 【微服务】6、一篇文章学会使用 SpringCloud 的网关
  2. overflow 溢出处理
  3. jQuery插件 -- jQuery UI插件
  4. Python 进阶指南(编程轻松进阶):一、处理错误和寻求帮助
  5. org.apache.hadoop.hbase.ipc.ServerNotRunningYetException: Server is not running yet
  6. es统计mysql 报表_用Elasticsearch实现统计排行榜
  7. ROS 2 Humble Hawksbill 官方文档
  8. 数据库连接泄露的问题
  9. 电子琴入门教程视频电子琴简谱
  10. 如何提高加速运行Mac电脑系统缓慢的5种方法教程