Python-opencv学习第三课:图像对象的创建与赋值

Python-opencv学习第三课:图像对象的创建与赋值

文章目录

  • Python-opencv学习第三课:图像对象的创建与赋值
  • 一、学习内容
  • 二、代码部分
    • 1.引入库
    • 2.定义一个图像创建函数和读入图片
    • 3.打印图像维度并进行显示
    • 4.完整代码
  • 三、运行结果
  • 总结


一、学习内容

记录笔者学习Python-opencv第三课:图像对象的创建与赋值,代码资料来源于网络贾老师视频。

二、代码部分

1.引入库

代码如下:

import cv2 as cv
import numpy as np

2.定义一个图像创建函数和读入图片

代码如下:

def mat_demo_():
    image = cv.imread("C:/Users/akaak/Pictures/OpenCV/1.png")  # BGR 0-255

3.打印图像维度并进行显示

代码如下:

print(image.shape)  #打印图像的维度 H高度 W宽度 C通道数,色彩图片有三通道,灰色图片零通道
    cv.imshow("image", image)
    cv.waitKey(0)#相当于按键操作,当键盘触发时候,显示图片窗口关闭,否则不关闭
    cv.destroyAllWindows()

4.完整代码

代码如下:

import cv2 as cv
import numpy as np

def read_demo_():
    image = cv.imread("C:/Users/akaak/Pictures/OpenCV/1.png")  # BGR 0-255
    cv.imshow("input", image)
    cv.waitKey(0)
    cv.destroyAllWindows()

def color_space_demo_():
    image = cv.imread("C:/Users/akaak/Pictures/OpenCV/1.png")  # BGR 0-255
    gray = cv.cvtColor(image, cv.COLOR_BGR2GRAY)#将bgr转换为gray
    hsv = cv.cvtColor(image, cv.COLOR_BGR2HSV)#将bgr转换为hsv
    thsv=cv.cvtColor(image,cv.COLOR_HSV2BGR)#将HSV转换为BGR
    # cv.namedwindow("input",cv.WINDOW.AUTOSIZE)
    cv.imshow("gray", gray)#显示一个窗口名为gray的gray图像
    cv.imshow("hsv", hsv)#显示一个窗口名为hsv的hsv图像
    cv.imshow("thsv", thsv)  # 显示一个窗口名为thsv的thsv图像
    cv.waitKey(0)#相当于按键操作,当键盘触发时候,显示图片窗口关闭,否则不关闭
    cv.destroyAllWindows()

def mat_demo_():
    image = cv.imread("C:/Users/akaak/Pictures/OpenCV/1.png")  # BGR 0-255
    print(image.shape)  #打印图像的维度 H高度 W宽度 C通道数,色彩图片有三通道,灰色图片零通道
    cv.imshow("image", image)
    cv.waitKey(0)#相当于按键操作,当键盘触发时候,显示图片窗口关闭,否则不关闭
    cv.destroyAllWindows()

if __name__ == "__main__":
    mat_demo_()

运行结果:
Python-opencv学习第三课:图像对象的创建与赋值_第1张图片
结论:可以看到是一个400x400像素,rgb图像因为是三通道。其中,第一个参数400是H高度,第二个参数400是W宽度,第三个参数是通道数。

a.如果将图片改为灰色图,应该不会显示三通道,只有400x400像素。

更改代码,只需将图片读取函数image = cv.imread(“C:/Users/akaak/Pictures/OpenCV/1.png”),改为 image = cv.imread(“C:/Users/akaak/Pictures/OpenCV/1.png”,cv.IMREAD_GRAYSCALE) 即可实现灰度图像读取。
代码如下:

import cv2 as cv
import numpy as np

def read_demo_():
    image = cv.imread("C:/Users/akaak/Pictures/OpenCV/1.png")  # BGR 0-255
    cv.imshow("input", image)
    cv.waitKey(0)
    cv.destroyAllWindows()

def color_space_demo_():
    image = cv.imread("C:/Users/akaak/Pictures/OpenCV/1.png")  # BGR 0-255
    gray = cv.cvtColor(image, cv.COLOR_BGR2GRAY)#将bgr转换为gray
    hsv = cv.cvtColor(image, cv.COLOR_BGR2HSV)#将bgr转换为hsv
    thsv=cv.cvtColor(image,cv.COLOR_HSV2BGR)#将HSV转换为BGR
    # cv.namedwindow("input",cv.WINDOW.AUTOSIZE)
    cv.imshow("gray", gray)#显示一个窗口名为gray的gray图像
    cv.imshow("hsv", hsv)#显示一个窗口名为hsv的hsv图像
    cv.imshow("thsv", thsv)  # 显示一个窗口名为thsv的thsv图像
    cv.waitKey(0)#相当于按键操作,当键盘触发时候,显示图片窗口关闭,否则不关闭
    cv.destroyAllWindows()

def mat_demo_():
    image = cv.imread("C:/Users/akaak/Pictures/OpenCV/1.png",cv.IMREAD_GRAYSCALE)  # BGR 0-255
    print(image.shape)  #打印图像的维度 H高度 W宽度 C通道数,色彩图片有三通道,灰色图片零通道
    cv.imshow("image", image)
    cv.waitKey(0)#相当于按键操作,当键盘触发时候,显示图片窗口关闭,否则不关闭
    cv.destroyAllWindows()

if __name__ == "__main__":
    mat_demo_()

Python-opencv学习第三课:图像对象的创建与赋值_第2张图片可以看到灰度图只有两个参数,H高度和宽度W,400x400,没有通道数。

b.如何创建一个空白窗口

更改代码, 需使用blank=np.zeros_like(image),函数即可实现空白窗口的建立。
代码如下:

import cv2 as cv
import numpy as np

def read_demo_():
    image = cv.imread("C:/Users/akaak/Pictures/OpenCV/1.png")  # BGR 0-255
    cv.imshow("input", image)
    cv.waitKey(0)
    cv.destroyAllWindows()

def color_space_demo_():
    image = cv.imread("C:/Users/akaak/Pictures/OpenCV/1.png")  # BGR 0-255
    gray = cv.cvtColor(image, cv.COLOR_BGR2GRAY)#将bgr转换为gray
    hsv = cv.cvtColor(image, cv.COLOR_BGR2HSV)#将bgr转换为hsv
    thsv=cv.cvtColor(image,cv.COLOR_HSV2BGR)#将HSV转换为BGR
    # cv.namedwindow("input",cv.WINDOW.AUTOSIZE)
    cv.imshow("gray", gray)#显示一个窗口名为gray的gray图像
    cv.imshow("hsv", hsv)#显示一个窗口名为hsv的hsv图像
    cv.imshow("thsv", thsv)  # 显示一个窗口名为thsv的thsv图像
    cv.waitKey(0)#相当于按键操作,当键盘触发时候,显示图片窗口关闭,否则不关闭
    cv.destroyAllWindows()

def mat_demo_():
    image = cv.imread("C:/Users/akaak/Pictures/OpenCV/1.png",cv.IMREAD_GRAYSCALE)  # BGR 0-255
    print(image.shape)  #打印图像的维度 H高度 W宽度 C通道数,色彩图片有三通道,灰色图片零通道
    blank = np.zeros_like(image)#产生一个空白窗口
    cv.imshow("image", image)#显示原图窗口
    cv.imshow("blank", blank)#显示blank空白窗口
    cv.waitKey(0)#相当于按键操作,当键盘触发时候,显示图片窗口关闭,否则不关闭
    cv.destroyAllWindows()

if __name__ == "__main__":
    mat_demo_()

c.如何将图片中的一部分(区域)拷贝过来
更改代码, 需使用roi = image[100:200, 100:200, :]blank[60:200, 60:280, :] = image[60:200, 60:280, :]
函数即可实现空白窗口的建立。

感兴趣局部区域像素分布 H高度100-200像素,W宽度100-200像素。灰度图像就没有最后一个冒号。blank和image要一致才能匹配。
代码如下:

import cv2 as cv
import numpy as np

def read_demo_():
    image = cv.imread("C:/Users/akaak/Pictures/OpenCV/1.png")  # BGR 0-255
    cv.imshow("input", image)
    cv.waitKey(0)
    cv.destroyAllWindows()

def color_space_demo_():
    image = cv.imread("C:/Users/akaak/Pictures/OpenCV/1.png")  # BGR 0-255
    gray = cv.cvtColor(image, cv.COLOR_BGR2GRAY)#将bgr转换为gray
    hsv = cv.cvtColor(image, cv.COLOR_BGR2HSV)#将bgr转换为hsv
    thsv=cv.cvtColor(image,cv.COLOR_HSV2BGR)#将HSV转换为BGR
    # cv.namedwindow("input",cv.WINDOW.AUTOSIZE)
    cv.imshow("gray", gray)#显示一个窗口名为gray的gray图像
    cv.imshow("hsv", hsv)#显示一个窗口名为hsv的hsv图像
    cv.imshow("thsv", thsv)  # 显示一个窗口名为thsv的thsv图像
    cv.waitKey(0)#相当于按键操作,当键盘触发时候,显示图片窗口关闭,否则不关闭
    cv.destroyAllWindows()

def mat_demo_():
    image = cv.imread("C:/Users/akaak/Pictures/OpenCV/1.png")  # BGR 0-255
    print(image.shape)  #打印图像的维度 H高度 W宽度 C通道数,色彩图片有三通道,灰色图片零通道
    roi = image[100:200, 100:200, :]  # 感兴趣局部区域像素分布 H高度100-200像素,W宽度100-200像素。灰度图像就没有最后一个冒号
    blank = np.zeros_like(image)#产生一个空白窗口
    blank[60:200, 60:280, :] = image[60:200, 60:280, :]  # blank和image要一致才能匹配
    cv.imshow("image", image)#显示原图窗口
    cv.imshow("blank", blank)#显示roi局部感兴趣图片的blank窗口
    cv.imshow("roi", roi)#单独显示roi局部感兴趣图片窗口
    cv.waitKey(0)#相当于按键操作,当键盘触发时候,显示图片窗口关闭,否则不关闭
    cv.destroyAllWindows()

if __name__ == "__main__":
    mat_demo_()

d.如何创建一个空白窗口(第二种方式)
更改代码, 需使用blank=np.zeros((h,w,c),dtype=np.uint8)h,w,c=image.shape,函数即可实现空白窗口的建立。

需要说明H,W,C以及字节数,这是区别于np.zeros_like()函数。
代码如下:

import cv2 as cv
import numpy as np

def read_demo_():
    image = cv.imread("C:/Users/akaak/Pictures/OpenCV/1.png")  # BGR 0-255
    cv.imshow("input", image)
    cv.waitKey(0)
    cv.destroyAllWindows()

def color_space_demo_():
    image = cv.imread("C:/Users/akaak/Pictures/OpenCV/1.png")  # BGR 0-255
    gray = cv.cvtColor(image, cv.COLOR_BGR2GRAY)#将bgr转换为gray
    hsv = cv.cvtColor(image, cv.COLOR_BGR2HSV)#将bgr转换为hsv
    thsv=cv.cvtColor(image,cv.COLOR_HSV2BGR)#将HSV转换为BGR
    # cv.namedwindow("input",cv.WINDOW.AUTOSIZE)
    cv.imshow("gray", gray)#显示一个窗口名为gray的gray图像
    cv.imshow("hsv", hsv)#显示一个窗口名为hsv的hsv图像
    cv.imshow("thsv", thsv)  # 显示一个窗口名为thsv的thsv图像
    cv.waitKey(0)#相当于按键操作,当键盘触发时候,显示图片窗口关闭,否则不关闭
    cv.destroyAllWindows()

def mat_demo_():
    image = cv.imread("C:/Users/akaak/Pictures/OpenCV/1.png")  # BGR 0-255
    h,w,c=image.shape #打印图像的维度 H高度 W宽度 C通道数,色彩图片有三通道,灰色图片零通道
    roi = image[100:200, 100:200, :]  # 感兴趣局部区域像素分布 H高度100-200像素,W宽度100-200像素。灰度图像就没有最后一个冒号
    blank=np.zeros((h,w,c),dtype=np.uint8)#产生一个空白窗口,需要说明H,W,C以及字节数,这是区别于np.zeros_like()函数。
    blank[60:200, 60:280, :] = image[60:200, 60:280, :]  # blank和image要一致才能匹配
    cv.imshow("image", image)#显示原图窗口
    cv.imshow("blank", blank)#显示blank空白窗口
    cv.waitKey(0)#相当于按键操作,当键盘触发时候,显示图片窗口关闭,否则不关闭
    cv.destroyAllWindows()

if __name__ == "__main__":
    mat_demo_()

e.如何将原始图片copy到空白窗口

更改代码, 需使用blank = np.copy(image),函数即可实现。将roi部分的blank上述代码注释掉。也可以用blank=image直接复制。

代码如下:(blank = np.copy(image))

import cv2 as cv
import numpy as np

def read_demo_():
    image = cv.imread("C:/Users/akaak/Pictures/OpenCV/1.png")  # BGR 0-255
    cv.imshow("input", image)
    cv.waitKey(0)
    cv.destroyAllWindows()

def color_space_demo_():
    image = cv.imread("C:/Users/akaak/Pictures/OpenCV/1.png")  # BGR 0-255
    gray = cv.cvtColor(image, cv.COLOR_BGR2GRAY)#将bgr转换为gray
    hsv = cv.cvtColor(image, cv.COLOR_BGR2HSV)#将bgr转换为hsv
    thsv=cv.cvtColor(image,cv.COLOR_HSV2BGR)#将HSV转换为BGR
    # cv.namedwindow("input",cv.WINDOW.AUTOSIZE)
    cv.imshow("gray", gray)#显示一个窗口名为gray的gray图像
    cv.imshow("hsv", hsv)#显示一个窗口名为hsv的hsv图像
    cv.imshow("thsv", thsv)  # 显示一个窗口名为thsv的thsv图像
    cv.waitKey(0)#相当于按键操作,当键盘触发时候,显示图片窗口关闭,否则不关闭
    cv.destroyAllWindows()

def mat_demo_():
    image = cv.imread("C:/Users/akaak/Pictures/OpenCV/1.png")  # BGR 0-255
    h,w,c=image.shape #打印图像的维度 H高度 W宽度 C通道数,色彩图片有三通道,灰色图片零通道
    roi = image[100:200, 100:200, :]  # 感兴趣局部区域像素分布 H高度100-200像素,W宽度100-200像素。灰度图像就没有最后一个冒号
    blank=np.zeros((h,w,c),dtype=np.uint8)#产生一个空白窗口,需要说明H,W,C以及字节数,这是区别于np.zeros_like()函数。
    #blank[60:200, 60:280, :] = image[60:200, 60:280, :]  # blank和image要一致才能匹配
    blank = np.copy(image)#使用copy函数直接进行复制,将blank上述注释掉
    cv.imshow("image", image)#显示原图窗口
    cv.imshow("blank", blank)#显示blank空白窗口
    cv.waitKey(0)#相当于按键操作,当键盘触发时候,显示图片窗口关闭,否则不关闭
    cv.destroyAllWindows()

if __name__ == "__main__":
    mat_demo_()

代码如下:(blank=image)

import cv2 as cv
import numpy as np

def read_demo_():
    image = cv.imread("C:/Users/akaak/Pictures/OpenCV/1.png")  # BGR 0-255
    cv.imshow("input", image)
    cv.waitKey(0)
    cv.destroyAllWindows()

def color_space_demo_():
    image = cv.imread("C:/Users/akaak/Pictures/OpenCV/1.png")  # BGR 0-255
    gray = cv.cvtColor(image, cv.COLOR_BGR2GRAY)#将bgr转换为gray
    hsv = cv.cvtColor(image, cv.COLOR_BGR2HSV)#将bgr转换为hsv
    thsv=cv.cvtColor(image,cv.COLOR_HSV2BGR)#将HSV转换为BGR
    # cv.namedwindow("input",cv.WINDOW.AUTOSIZE)
    cv.imshow("gray", gray)#显示一个窗口名为gray的gray图像
    cv.imshow("hsv", hsv)#显示一个窗口名为hsv的hsv图像
    cv.imshow("thsv", thsv)  # 显示一个窗口名为thsv的thsv图像
    cv.waitKey(0)#相当于按键操作,当键盘触发时候,显示图片窗口关闭,否则不关闭
    cv.destroyAllWindows()

def mat_demo_():
    image = cv.imread("C:/Users/akaak/Pictures/OpenCV/1.png")  # BGR 0-255
    h,w,c=image.shape #打印图像的维度 H高度 W宽度 C通道数,色彩图片有三通道,灰色图片零通道
    roi = image[100:200, 100:200, :]  # 感兴趣局部区域像素分布 H高度100-200像素,W宽度100-200像素。灰度图像就没有最后一个冒号
    blank=np.zeros((h,w,c),dtype=np.uint8)#产生一个空白窗口,需要说明H,W,C以及字节数,这是区别于np.zeros_like()函数。
    #blank[60:200, 60:280, :] = image[60:200, 60:280, :]  # blank和image要一致才能匹配
    #blank = np.copy(image)#使用copy函数直接进行复制,将blank上述注释掉
    blank=image#实现原图到blank的复制
    cv.imshow("image", image)#显示原图窗口
    cv.imshow("blank", blank)#显示blank空白窗口
    cv.waitKey(0)#相当于按键操作,当键盘触发时候,显示图片窗口关闭,否则不关闭
    cv.destroyAllWindows()

if __name__ == "__main__":
    mat_demo_()

三、运行结果

Python-opencv学习第三课:图像对象的创建与赋值_第3张图片彩色图

Python-opencv学习第三课:图像对象的创建与赋值_第4张图片灰度图
Python-opencv学习第三课:图像对象的创建与赋值_第5张图片创建一个空白窗口

Python-opencv学习第三课:图像对象的创建与赋值_第6张图片局部感兴趣显示

Python-opencv学习第三课:图像对象的创建与赋值_第7张图片创建一个空白窗口

总结

本文介绍了笔者学习Python-opencv第三课:图像对象的创建与赋值,学习了彩色图与灰度图的区别,产生一个空白窗口的两种方式,将图片中的一部分(区域)拷贝过来,以及将整一副图copy复制。(代码资料来源于网络贾老师视频)

你可能感兴趣的:(深度学习之opencv快速入门,opencv,python,图像处理)