第二个内容第一天 opencv的基本内容:
1.使用opencv显示一个图片界面:
import cv2 img=cv2.imread('D:\\xusir.jpg') #进行图片的读取 cv2.imshow('xusir',img) #进行图片的显示 cv2.waitKey(0) #设置图片展示的时间 cv2.destroyAllwindows() #江窗口文件阱行销毁
1.1在上面程序中我们需要注意的是:使用imread时如果读取二值图像或者是灰度图像时后面要加上第二个物理量:IMREAD_UNCHANGED;
1.2 在上述程序中如果想要给展示的图片进行时间设定则需要在括号里输入大于0的数字,如果输入为0则默认为无线等待 输入值小于0则等待键盘敲击。
2.使用opencv进行图像的保存:
cv2.imwrite('D:\\wusir.jpg',img)#进行图片的保存
3.图像主要分为三种:二值图像、灰度图像、rgb图像:
3.1二值图像:图片的像素值:要么是0要么是1 属于单通道
3.2 灰度图像:图像的像素值:从0到255 属于单通道:
· 3.3在opencv中,图像的读取和写入顺序和我们平时所接触到的正好想反:是bgr:值得范围也是从0到255;属于三通道
4.进行图像像素的读取:
4.1返回值=图像.(位置参数)
1.灰度图像的值读取:
import cv2 img=cv2.imread('D:\cc1\lena256.bmp',cv2.IMREAD_UNCHANGED) #进行图片的读取 b=img[11,33]# 读取灰度图像的像素值 print(b) 结果为 runfile('C:/Users/OYMK/untitled0.py', wdir='C:/Users/OYMK') 89
2.bgr图像值的获取和修改:
import cv2 img=cv2.imread('D:\cc1\lena.bmp',cv2.IMREAD_UNCHANGED) #进行图片的读取 b=img[11,33,0]# 读取灰度图像的像素值 img[11,33]=255 print(img[11,33]) print(b)
4.2进心灰度图像值的修改:
import cv2 img=cv2.imread('D:\cc1\lena256.bmp',cv2.IMREAD_UNCHANGED) #进行图片的读取 b=img[11,33]# 读取灰度图像的像素值 img[11,33]=255 print(img[11,33]) print(b) 结果为 n [20]: runfile('C:/Users/OYMK/untitled0.py', wdir='C:/Users/OYMK') 255 89
4.3如果想要图像某个范围内的像素值都改成统一的数值:
import cv2 img=cv2.imread('D:\cc1\lenacolor.png',cv2.IMREAD_UNCHANGED) #进行图片的读取 img[100:130,100:130]=[255,255,255]# 将图片某一范围内的像素设置成某一个值 cv2.imshow('lenacolor',img) #进行图片的显示 cv2.imwrite('D:\test.png',img) #进行图片的写入 cv2.waitKey(0) cv2.destroyAllwindows()
5.第二种读取像素的方法:
返回值=图像.item(位置参数)
1.1灰度图像
import cv2 img=cv2.imread('D:\cc1\lena256.bmp',cv2.IMREAD_UNCHANGED) #进行图片的读取 b=img.item(11,33) print(b) 结果为 Users/OYMK') 89
1.2bgr图像:
import cv2 img=cv2.imread('D:\cc1\lenacolor.png',cv2.IMREAD_UNCHANGED) #进行图片的读取 print(img.item(111,111,0))
2.进行值的修改:图像.itemset(位置参数,新值)
import cv2 img=cv2.imread('D:\cc1\lenacolor.png',cv2.IMREAD_UNCHANGED) #进行图片的读取 print(img.item(11,33,0)) img.itemset((11,33,0),255) print(img.item(11,33,0))
6.获取图像的大小:shape及获取图像的行数、列数、通道数:
import cv2 img=cv2.imread('D:\cc1\lenacolor.png',cv2.IMREAD_UNCHANGED) #进行图片的读取 print(img.shape) (512, 512, 3)
7.获取图像的像素数目(即图像的大小):
import cv2 img=cv2.imread('D:\cc1\lena256.bmp',cv2.IMREAD_UNCHANGED) #进行图片的读取 print(img.shape) print(img.size) 结果为 (256, 256) 65536
8.获取图像的类型:dtype
import cv2 img=cv2.imread('D:\cc1\lena256.bmp',cv2.IMREAD_UNCHANGED) #进行图片的读取 img1=cv2.imread('D:\cc1\lenacolor.png',cv2.IMREAD_UNCHANGED) print(img.dtype) print(img.size) print(img1.size) print(img.dtype) 结果为 uint8 65536 786432 uint8
9.图像的ROI
就是取出图像某一范围的像素放到另一张图片上或者这张图片的另一个位置上:
import cv2 img=cv2.imread('D:\cc1\lenacolor.png',cv2.IMREAD_UNCHANGED) #进行图片的读取 img1=cv2.imread('D:\cc1\girl.bmp',cv2.IMREAD_UNCHANGED) face=img[200:400,200:400] print(img.shape) img1[100:300,100:300]=face cv2.imshow('changed',img1) cv2.waitKey(0) cv2.destroyAllwindows()
import cv2 import numpy as np img=cv2.imread('D:\cc1\lenacolor.png',cv2.IMREAD_UNCHANGED) face=np.ones((200,200,3)) print(img.shape) face=img[200:400,200:400] cv2.imshow('new',face) cv2.waitKey(-5) cv2.destroyAllWindows()
10将彩色图像进行颜色的分割:split
1split
import cv2 import numpy as np img=cv2.imread('D:\cc1\lenacolor.png',cv2.IMREAD_UNCHANGED) b,g,r=cv2.split(img) cv2.imshow('b',b) cv2.imshow('g',g) cv2.imshow('r',r) cv2.waitKey(-1) cv2.destroyAllWindows()
2.将分割的结果进行拆分:
import cv2 import numpy as np img=cv2.imread('D:\cc1\lenacolor.png',cv2.IMREAD_UNCHANGED) b=cv2.split(img)[0] g=cv2.split(img)[1] r=cv2.split(img)[2] cv2.imshow('b',b) cv2.imshow('g',g) cv2.imshow('r',r) cv2.waitKey(-1) cv2.destroyAllWindows()
11.将分割的像素进行整合:merger(在进行整合的时候一定要注意顺序 :bgr)
import cv2 import numpy as np img=cv2.imread('D:\cc1\lenacolor.png',cv2.IMREAD_UNCHANGED) b=cv2.split(img)[0] g=cv2.split(img)[1] r=cv2.split(img)[2] color=cv2.merge([b,g,r]) cv2.imshow('b',b) cv2.imshow('g',g) cv2.imshow('r',r) cv2.imshow('merge',color) cv2.waitKey(-1) cv2.destroyAllWindows()
12.合并的案列:
import cv2 import numpy as np img=cv2.imread('D:\cc1\lenacolor.png',cv2.IMREAD_UNCHANGED) rows,cols,chan1=img.shape b=np.zeros((rows,cols),img.dtype) g=cv2.split(img)[1] r=np.zeros((rows,cols),img.dtype) color=cv2.merge([b,g,r]) cv2.imshow('merge',color) cv2.waitKey(-1) cv2.destroyAllWindows()
13.图像的加法运算:(图像的大小和类型必须相同)
1.numpy加法运算: 新图像=图像1+图像2 新图像的像素值采取取模值:即1.当两个图像的像素值相加小于255时,取两个图像像素相加的值,如果超过255
则对相加的结果除以255取余。列(255+34)%255=34
import cv2 import numpy as np img=cv2.imread('D:\\cc1\\lena256.bmp',cv2.IMREAD_UNCHANGED) img1=img img_new=img1+img cv2.imshow('old',img) cv2.imshow('new',img_new) cv2.waitKey(0) cv2.destroyAllWindows()
2.opencv中的加法运算:新图像=cv2.add(图像1,图像2)运算规则是:即1.当两个图像的像素值相加小于255时,取两个图像像素相加的值,如果超过255
则值取255
import cv2 import numpy as np img=cv2.imread('D:\\cc1\\lena256.bmp',cv2.IMREAD_UNCHANGED) img1=img img_new=cv2.add(img1,img) cv2.imshow('old',img) cv2.imshow('new',img_new) cv2.waitKey(0) cv2.destroyAllWindows()
14图像的融合:即将两张即两张以上的图像融合成一张图片:(图片的大小要一样)
1.图像融合的算法: cv2.addweighted( src1,alpah,src2,beta,gamma) 计算规则:dst=src1*alpha+src2*beta+gamma(参数gamma不能省略)
import cv2 import numpy as np img=cv2.imread('D:\\cc1\\girl.bmp',cv2.IMREAD_UNCHANGED) img1=cv2.imread("D:\\cc1\\girl.bmp",cv2.IMREAD_UNCHANGED) img_new=cv2.addWeighted(img,1,img1,1,0) cv2.imshow('old',img) cv2.imshow('new',img_new) cv2.waitKey(0) cv2.destroyAllWindows()