欢迎大家来到IT世界,在知识的湖畔探索吧!
文章目录
前言
OpenCV知识讲解
图像的加法运算
图像融合
图像的类型转换
图像缩放
图像翻转
前言
未来随着5G技术的普及,整个世界也许看到的都是视频与图像,视频与图像数据都需要通过计算机视觉进行解析信息,读取理解,也有人说未来的世界将是像素主导一切的世界,这样我们就更加离不开计算机视觉等相关技术。
OpenCV框架是计算机视觉领域最流行的框架之一,自发布以来,因为其免费开源收到了工业界与学术界广泛关注与兴趣,成功的在多个计算机视觉应用领域落地,这些领域包括生物图像检测与分析、工业缺陷检测、军事无人机、农业植物图像分析、安防监控领域、文字OCR识别、文档信息化处理、视频分析、智能交通与无人驾驶领域、水体环境监测、设备缺陷分析等方面。
OpenCV知识讲解
图像的加法运算
1.numpy加法运算讲解
其中numpy使用的就是加模运算。
运算过程就是:运算结果=图像1+图像2
因为图像上的表示都为二进制表示,比如我们所说的
0→00000000 255→11111111
情况一:但是如果两个图像对应的像素值相加小于等于255,那么我们就取该值,保留下来。
比如100+58=158,那么158<=255,那么我们保留158这个数值。
情况二:如果两个图像对应的像素值相加大于255,那么我们就对255取模运算。
比如255+58=313,那么就进行313%255=58,这里就保留取模运算之后的结果58。
2.OpenCV加法运算讲解
OpenCV使用的是饱和运算。
运算过程就是:结果=cv2.add(图像1,图像2)
这里的方法就和上方的numpy算法有所不同。
情况一:保持一致,如果不超过255,那么我们就保留下来。
情况二:如果相加的结果超过了255,那么我们就直接保留255。和上方不同!
3.Numpy和OpenCV加法运算代码
import cv2
import numpy as np
a=cv2.imread('path(图片对应路径)')
b=a
add1=a+b
add2=cv2.add(a,b)
cv2.imshow('add1',add1)
cv2.imshow('add2',add2)
cv2.waitKey()
cv2.destroyAllWindows()
12345678910
欢迎大家来到IT世界,在知识的湖畔探索吧!
我们还是以大美女lena为例。这里是原始图像。
这是Numpy加模运算结果图,可以看出超过255的点都进行了加模。
这里是OpenCV加法运算结果图。
重要注意:这里参与加法运算的所有图像必须保证大小一致,类型必须一致。
图像融合
- 融合的目的就是将2张或者2张以上的图像信息融合到一张图像上。
- 融合的图像含有更多的信息,能够方便人来观察或者计算机的处理。部分不清晰+部分不清晰=清晰
- 在做图像融合的时候:结果图像=图像1系数1+图像2系数2+亮度调节值,其中的系数1和系数2可以说成图像所占权重。
使用函数addWeighted
dst=cv.addWeighted(src1,alpha,arc2,bata,gamma)
dst=src1alpha+src2beta+gamma
下面我们介绍一下图像boat和图像lena的融合结果。
图像融合代码
欢迎大家来到IT世界,在知识的湖畔探索吧!import cv2
a=cv2.imread('path boat')
b=cv2.imread('path lena')
c=cv2.addWeighted(a,1,b,1,0)
cv2.imshow('a',a)
cv2.imshow('b',b)
cv2.imshow('c',c)
cv2.waitKey
12345678
图像的类型转换
我们之前提及过图片类型转换我们今天要进行详细的解答。
其中类型转换包括由彩色也就是BGR转化为灰度图像,BGR转RGB,灰度图像转RGB图像,还有灰度图像转二值图像等等。其中OpenCV提供了200多种的类型转换方法。其中最常用的包括:
- cv2.COLOR_BGR2GRAY BGR转灰度图像
- cv2.COLOR_BGR2RGB BGR转RGB
- cv2.COLOR_GRAY2BGR 灰度图像转BGR
1.BGR转灰度图像
import cv2
a=cv2.imread('lenacolor.png')
b=cv2.cvtColor(a,cv2.COLOR_BGR2GRAY)
cv2.imshow('lenacolor',a)
cv2.imshow('lenaGray',b)
cv2.waitKey()
cv2.destroyAllWindows()
1234567
2.BGR转RGB
欢迎大家来到IT世界,在知识的湖畔探索吧!import cv2
a=cv2.imread('lenacolor.png')
b=cv2.cvtColor(a,cv2.COLOR_BGR2RGB)
cv2.imshow('lenacolor',a)
cv2.imshow('lenaGray',b)
cv2.waitKey()
cv2.destroyAllWindows()
1234567
3.灰度图像转BGR
import cv2
a=cv2.imread('lenagray.png')
b=cv2.cvtColor(a,cv2.COLOR_GRAY2BGR)
cv2.imshow('lenagrayr',a)
cv2.imshow('lenabgr',b)
print(a.shape)
print(b.shape)
bb,bg,br=cv2.split(b)
cv2.imshow("bb",bb)
cv2.imshow("bg",bg)
cv2.imshow("br",br)
cv2.waitKey()
cv2.destroyAllWindows()
12345678910111213
这里我们得到的输出是(256,256)和(256,256,3),说明已经转型成功。
图像缩放
图像缩放相关函数:resize函数
语法格式:
dst=cv2.resize(src, dsize[, dst[, fx[, fy[, interpolation]]]])
dst=cv2.resize(src,dsize)
其中src为原始图像,dsize为缩放的大小
例如:b=cv2.resize(a,(122,122)),(122,122)表示新图片的尺寸。
其中还有一种表达形式就是,fx表示在水平方向上放大或者缩小了多少倍,如果大于1则说明是放大,如果小于1,说明是缩小多少倍。同样fy表示在垂直方向上。
dsize和fx,fy设置一个即可!
一般情况下我们都这么表示:
b=cv2.resize(a,(round(cols0.5),round(rows0.5)))
其中round函数表示四舍五入的意思。或者
b=cv2.resize(a,None,fx=1.2,fy=0.5)
这里就表示在水平方向上放大1.2倍,在垂直方向上虽小0.5倍。
⌛️代码部分
import cv2
a=cv2.imread("image\\lenacolor.png")
rows,cols=a.shape[:2]
b=cv2.resize(a,(200,100))
cv2.imshow("original",a)
cv2.imshow("resize",b)
cv2.waitKey()
cv2.destroyAllWindows()
12345678
import cv2a=cv2.imread("image\\lenacolor.png")rows,cols=a.shape[:2]b=cv2.resize(a,(round(cols*0.5),round(rows*1.2)))cv2.imshow("original",a)cv2.imshow("resize",b)cv2.waitKey()cv2.destroyAllWindows()12345678
图像翻转
函数介绍:flip函数
相关语法:
dst=cv2.flip(src,flipcode)
src表示原始图像,flipcode表示使用什么模式翻转
例如:dst=cv2.flip(src,1)
flipcode=0;表示以x轴为对称轴上下翻转。
flipcode>0;表示以y轴为对称轴上下翻转。
flipcode<0;表示以x轴和y轴为对称轴同时翻转。
对应代码
import cv2
a=cv2.imread("image\\lenacolor.png")
b=cv2.flip(a,0)
cv2.imshow("original",a)
cv2.imshow("flip",b)
cv2.waitKey()
cv2.destroyAllWindows()
1234567
免责声明:本站所有文章内容,图片,视频等均是来源于用户投稿和互联网及文摘转载整编而成,不代表本站观点,不承担相关法律责任。其著作权各归其原作者或其出版社所有。如发现本站有涉嫌抄袭侵权/违法违规的内容,侵犯到您的权益,请在线联系站长,一经查实,本站将立刻删除。 本文来自网络,若有侵权,请联系删除,如若转载,请注明出处:https://itzsg.com/12226.html