open-cv 中读取,显示,写入图像

判断自己pytorch虚拟环境是否安装了 cv2 可以使用 pip list

1

.读取图像:imread()
imread()方法 第一个参数 传入图像文件的路径,读取成功返回值为 numpy()类型的数组。
获取图像失败 不会抛异常,而是得到一个None

import cv2
img = cv2.imread('图像的路径')
print('type(img)',img)
#返回值numpy数组

第二个参数 有3种模式

cv2.IMREAD_COLOR	缺省方式,读取图像为BGR 8-bit 格式.  这里需要注意opencv默认通道为BGR模式
cv2.IMREAD_UNCHANGED	图像格式不做任何改变,可用在读取带alpha通道的图片
cv2.IMREAD_GRAYSCALE	读取图像为转换为灰度图
import cv2
img = cv2.imread('图像路径',cv2.IMREAD_UNCHANGED)
print(img.shape)

5125123

注:图像的宽度是width = cols = img.shape[1];图像的高度为height = rows = img.shape[0]

2

显示图像 imshow()
imshow()用来显示图片,第一个参数为显示窗口的名称,第二个参数是imread()等方法生成的图像实例
waitKey() 传入的参数如果为0,会无限等待直到任何按键按下,或者传入其他数值参数表示等待时长,单位为ms,时长结束后显示图像窗口会关闭。

import sys
import cv2
img = cv2.imread('图片路径',cv2.IMREAD_UNCHANGED)
	if img is None:
		print('没有读入图像')
		sys.exit(-1)#异常终止,退出程序
cv2.imshow('名称',img)
cv2.waitKey(1000)

调整窗口
可以使用nameWindow()resizeWindow()
nameWindow(窗口名称,cv2.WINDOW_NORMAL)命名窗口
resizeWindow(窗口名称,窗口宽度,窗口高度)缩放窗口

rows,cols = img.shape[0],img.shape[1]

cv2.namedWindow('lena-down', cv2.WINDOW_NORMAL)
cv2.resizeWindow('lena-down',(int(cols*0.5),int(rows*0.5)))
cv2.imshow('lena-down',img)

cv2.namedWindow('lena-up', cv2.WINDOW_NORMAL) 
cv2.resizeWindow('lena-up',(int(cols*1.3),int(rows*1.3)))
cv2.imshow('lena-up',img)

销毁窗口

cv2.waitKey(0)
cv2.destroyWindow('窗口名称') #关闭单个窗口
cv2.waitKey(0)
cv2.destroyAllWindows()  #关闭所有显示窗口

简单的一个显示图像封装

dbg_is_show = False
def show_img(win_name,img,wait_time=0,img_ratio=0.15,is_show=True):
    if is_show is not True:
        return 
    rows = img.shape[0]
    cols = img.shape[1]
    cv2.namedWindow(win_name, cv2.WINDOW_NORMAL )#cv2.WINDOW_AUTOSIZE)
    cv2.resizeWindow(win_name,(int(cols*img_ratio),int(rows*img_ratio)))
    #这里先是图像的宽度,宽度是cols = img.shape[1]
    cv2.imshow(win_name,img)
    cv2.waitKey(wait_time)

3.

写入图片 imwrite()
imwrite()第1个参数是写入的文件名称,文件名称的
后缀**决定了图片文件的格式,第2个参数为图像实例。

cv2.imwrite('lena.bmp',img)    
cv2.imwrite('lena.png',img) 
#将imread()读出的图像实例分别写入为bmp和jpg格式的文件

4.

cv2读出的数据直接用matplotlib显示,会导致颜色错乱,原因是cv2读出的数据是按照BGR格式组织的,而matplotlib显示图像需要按照RGB格式组织,所以需要将读出的numpy数据进行转换:

import numpy as np
import matplotlib.pyplot as plt
import cv2

img = cv2.imread('lena.jpg')  #opencv读取文件图片 
print('type(img):',type(img))
print(img.shape)
img2=img.copy()
img2[:,:,2]=img[:,:,0]
img2[:,:,0]=img[:,:,2]
plt.imshow(img2) #imshow
plt.show()
使用OpenCV读取视频帧并应用抖动算法来显示灰度图像,并将得到的十六进制解码存放在.txt文件的示例代码如下: ```python import cv2 def dithering(image): # 将彩色图像转换为灰度图像 gray = cv2.cvtColor(image, cv2.COLOR_BGR2GRAY) # 应用抖动算法(这里使用Floyd-Steinberg抖动) height, width = gray.shape for y in range(height): for x in range(width): old_pixel = gray[y, x] new_pixel = 255 if old_pixel > 127 else 0 gray[y, x] = new_pixel error = old_pixel - new_pixel if x < width-1: gray[y, x+1] += error * 7 / 16 if y < height-1: if x > 0: gray[y+1, x-1] += error * 3 / 16 gray[y+1, x] += error * 5 / 16 if x < width-1: gray[y+1, x+1] += error * 1 / 16 return gray # 打开视频文件 video = cv2.VideoCapture('video.mp4') # 创建并打开.txt文件 file = open('hex_codes.txt', 'w') while True: ret, frame = video.read() if not ret: break # 应用抖动算法并显示灰度图像 gray_frame = dithering(frame) cv2.imshow('Dithered Gray', gray_frame) # 将灰度图像转换为十六进制字符串 hex_code = gray_frame.flatten().tostring().hex() # 将十六进制字符串写入.txt文件 file.write(hex_code) file.write('\n') # 按下'q'键退出循环 if cv2.waitKey(1) == ord('q'): break # 释放资源、关闭窗口和关闭.txt文件 video.release() cv2.destroyAllWindows() file.close() ``` 上述代码,我们在每个视频帧上应用了抖动算法,并将帧显示为灰度图像。然后,我们将灰度图像转换为十六进制字符串,并将其写入名为`hex_codes.txt`的文本文件。你可以根据需要调整代码以适应你的应用场景。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值