概述
OpenCV学习第一天
- 图像的分类
- 二值图像
- 灰度图
- 彩色图
- OpenCV的IO操作
- 读取图像
- 显示图像
- 保存图像
- OpenCV绘制几何图形
- 绘制直线
- 绘制圆形
- 绘制矩形
- 代码测试
- OpenCV的其他操作
- 向图像中添加文字
- 改变图片某个像素点的值
- 图像通道的拆分和合并
- 色彩空间的变化
- OpenCV的算数操作
- 图像的加法
- 图像的混合
图像的分类
二值图像
一幅二值图像的二维矩阵仅由0、1两个值构成(“0”表示黑色,“1”表示爱色)。也就是说一张图像,每个像素只有0或1两种情况。
灰度图
灰度数字图像是每个像素只有一个采样颜色**([0,255],共256级灰度)**的图像。这类图像通常显示为从最暗黑色到最亮的白色的灰度,尽管理论上这个采样可以任何颜色的不同深浅,甚至可以是不同亮度上的不同颜色。灰度图像与黑白图像不同,在计算机图像领域中黑白图像只有黑白两种颜色,灰度图像在黑色与白色之间还有许多级的颜色深度。 --百度百科
彩色图
彩色图形是指每个像素由R、G、B分量构成的图像,其中R、G、B是由不同的灰度级来描述的。
OpenCV的IO操作
注意:如果你在这里把偶哦,但是你确定不是你下载的环境问题,那你就可以看看别使用绝对路劲了,可以试一下相对路径。opencv是不允许出现中文的(nnd)。
import cv2 as cv
读取图像
cv.imread('路径',读取方式)
# 读取方式有以下几种方式
# 0 :灰度模式
# 1 :彩色模式
# -1 :alpha通道
显示图像
cv.imshow("显示窗口名称",图像)
cv.waitKey(等待时间)
保存图像
cv.imwrite("保存的图像路径名字",图像)
OpenCV绘制几何图形
绘制直线
cv.lline(img, start, end, color, thickness)
# img:图片
# start:绘制直线的起点
# end:绘制直线的终点
# color:绘制直线的颜色
# thickness:绘制线的宽度
绘制圆形
cv.vircle(img, centerpoint, r, color, thickness)
# img:图片
# centerpoint:圆心
# r:⚪的半径
# color:绘制⚪的颜色
# thickness:绘制线的宽度
绘制矩形
cv.rectangle(img, leftupper, rightdown, color, thickness)
# img:图片
# leftupper:绘制矩形的左上角顶点
# rightupper:绘制矩形的右下角顶点
# color:绘制颜色
# thickness:绘制线宽度
代码测试
import cv2 as cv
import numpy as np
import matplotlib.pyplot as plt
img = np.zeros((512, 512, 3), np.uint8)
cv.line(img, (0, 0), (512, 512), (255, 0, 0), 10)
cv.circle(img, (100, 100), 50, (0, 0, 255), 10)
cv.rectangle(img, (256, 256), (300, 300), (0, 255, 0), 10)
font = cv.FONT_HERSHEY_SCRIPT_SIMPLEX
cv.putText(img, 'OpenCV', (50, 100), font, 4, (255, 100, 0), 10 )
# 按照rgb格式显示,因为默认读取的通道是bgr
plt.imshow(img[:, :, ::-1])
plt.title("result"), plt.xticks([]), plt.yticks([])
plt.show()
OpenCV的其他操作
向图像中添加文字
就是在station(看下面)哪里加文字,类似于你对图片编辑一句话,用qq截图嫌弃自己字丑的可以试一下,station可以慢慢调。
cv.putText(img, text, station, font, fontsize, color, thickness, cv.LINE_AA)
# img:图片
# text:内容
# station:添加位置
# font:字体
# fontsize:字体大小
# color:绘制直线的颜色
# thickness:绘制直线的宽度
文字的添加在上面有测试
改变图片某个像素点的值
虽然我觉得没啥用,但是听都听了还是记一下吧,我觉得应该不至于去改一个像素吧,不至于那么离谱,来一个628*628的图像,改一个像素也没啥用吧
img[x, y] = [?, ?, ?]
?:表示的是rgb三个通道的值
图像通道的拆分和合并
将彩色图像转换成rgb3个不同通道的图像
# 通道拆分
b,g,r = cv.spilt(img)
# 通道合并
img = cv.merge(b,g,r)
色彩空间的变化
将图像转换成其他格式,比如将彩色图转成灰度图,或者hsv格式
cv.cvtColor(img, flag)
# img:图像
# flag:
# cv.COLOR_BGR2GRAY :bgr-->gray
# cv.COLOR_BGR2HSV :bgr-->hsv
OpenCV的算数操作
图像的加法
将两幅图像加载在一起
cv.add(图像1, 图像2)
这个要求进行加法运算的图像一定要大小相匹配(像素要相同),不然会报错:
cv2.error: OpenCV(4.5.1) C:UsersappveyorAppDataLocalTemp1pip-req-build-wvn_it83opencvmodulescoresrcarithm.cpp:669: error: (-209:Sizes of input arguments do not match) The operation is neither ‘array op array’ (where arrays have the same size and the same number of channels), nor ‘array op scalar’, nor ‘scalar op array’ in function ‘cv::arithm_op’
这里进行了cv中的加法和numpy中的加法进行比较,总的来说区别如下:
- cv的加法是一种饱和运算,例如灰度级为[0, 255],如果两个图像的加法运算超过了255,那么是默认取255的;
- numpy的加法是一种模运算,例如两个图像的灰度级相加超过了255,那么需要对255进行取模运算。
我觉得吧这个各有好处,只是看运用了,不同的场景有不同的运用方式。
图像的混合
特殊的图像加法,即给两张图片进行不同的权重分配,权重大的图像保留的信息多些,权重小的图像保留的信息少些,给人一种混合的感觉。
公式如下:
g(x) = (1 - α)f(x) + αf(y) 其中α为权重,f(x) 、f(y)是图像
cv库中的公式
cv.addWeighted(图像1, weight1, 图像2, weight2, 常数)
# 原理:
# 混合图像 = αimg1 + βimg2 + γ
最后
以上就是开放电灯胆为你收集整理的OpenCV学习——基本概念到基本操作的全部内容,希望文章能够帮你解决OpenCV学习——基本概念到基本操作所遇到的程序开发问题。
如果觉得靠谱客网站的内容还不错,欢迎将靠谱客网站推荐给程序员好友。
发表评论 取消回复