暂无图片
暂无图片
暂无图片
暂无图片
暂无图片

OpenCV-Python - 核心功能 - 图像操作

数据库杂货铺 2022-01-23
915

输入/输出图像

 

从文件加载图像:

 

img = cv.imread(filename)

 

如果读取 jpg 文件,默认情况下会创建一个3通道图像。如果需要灰度图像,请使用:

 

img = cv.imread(filename, cv.IMREAD_GRAYSCALE)

 

文件的格式由其内容(前几个字节)决定。要将图像保存到文件,请执行以下操作:

 

cv.imwrite(filename, img)

 

图像的基本操作

 

访问像素值

 

为了得到像素强度值,必须知道图像的类型和通道的数量。下面是针对一个单通道灰度图像(类型8UC1)和像素坐标为 x y 的例子:

 

_intensity = img[y,x]

 

现在考虑一个具有 BGR 颜色排序的3通道图像(由 imread 返回的默认格式):

 

_blue = img[y,x,0]
_green = img[y,x,1]
_red = img[y,x,2]

 

修改像素值:

 

img[y,x] = 128

 

复制对象:

 

img = cv.imread('image.jpg')
_img1 = np.copy(img)

 

基本操作

 

可以对矩阵进行许多方便的运算。例如,下面是如何从现有灰度图像 img 生成黑色图像

 

img[:] = 0

 

选择感兴趣的区域:

 

_smallImg = img[10:110,10:110]

 

从彩色图像转换到灰度图像:

 

img = cv.imread('image.jpg')
_grey = cv.cvtColor(img, cv.COLOR_BGR2GRAY)

 

将图像类型从 8UC1 改为 32FC1

 

_dst = src.astype(np.float32)

 

可视化图像

 

在开发过程中查看算法的中间结果是非常有用的。OpenCV 提供了一种方便的图像可视化方法。一个 8U 的图像可以通过以下方式显示:

 

import cv2 as cv


img = cv.imread('64.jpg')
cv.namedWindow('image', cv.WINDOW_AUTOSIZE)
cv.imshow('image', img)
cv.waitKey()

 

注意:

 

需要在安装了 opencv 的情况下才行,我测试用例是在Windows 中,进入虚拟环境(venv\Scripts\activate.bat

 

然后运行:python demo.py

 

 

调用 waitKey() 开始一个消息传递循环,等待 “image” 窗口中的一次按键。一个 32F 的图像需要转换为 8U 类型。例如:

 

import cv2 as cv
import numpy as np


img = cv.imread(demo.jpg')
grey = cv.cvtColor(img, cv.COLOR_BGR2GRAY)
sobelx = cv.Sobel(grey, cv.CV_32F, 1, 0)
minVal = np.amin(sobelx)
maxVal = np.amax(sobelx)
draw = cv.convertScaleAbs(sobelx, alpha=255.0/(maxVal - minVal), beta=-minVal * 255.0/(maxVal - minVal))
cv.namedWindow('image', cv.WINDOW_AUTOSIZE)
cv.imshow('image', draw)
cv.waitKey()

 

 

 

 

 

官方文档:

https://docs.opencv.org/4.5.5/d5/d98/tutorial_mat_operations.html

文章转载自数据库杂货铺,如果涉嫌侵权,请发送邮件至:contact@modb.pro进行举报,并提供相关证据,一经查实,墨天轮将立刻删除相关内容。

评论