2000字范文,分享全网优秀范文,学习好帮手!
2000字范文 > 基于OpenCV的计算机视觉入门(5)图像美化(上)

基于OpenCV的计算机视觉入门(5)图像美化(上)

时间:2022-06-25 10:43:57

相关推荐

基于OpenCV的计算机视觉入门(5)图像美化(上)

彩色图片直方图

import cv2import numpy as npdef ImageHist(image,type):color = (255,255,255)windowName = 'Gray'if type == 31:color = (255,0,0)windowName = 'B Hist'elif type == 32:color = (0,255,0)windowName = 'G Hist'elif type == 33:color = (0,0,255)windowName = 'R Hist'# 1 image 2 [0] 3 mask None 4 256 5 0-255\n",hist = cv2.calcHist([image],[0],None,[256],[0.0,255.0])minV,maxV,minL,maxL = cv2.minMaxLoc(hist)histImg = np.zeros([256,256,3],np.uint8)for h in range(256):intenNormal = int(hist[h]*256/maxV)cv2.line(histImg,(h,256),(h,256-intenNormal),color)cv2.imshow(windowName,histImg)return histImgimg = cv2.imread('haha.png',1)channels = cv2.split(img)# RGB - R G B\n",for i in range(0,3):ImageHist(channels[i],31+i)cv2.waitKey(10000)

难以想象,这么一坨东西,就是我和我弟弟~

灰度均衡化

首先最重要的就是需要一张非常好看的自拍~~~

第二张图明显要更加亮一些。

import cv2import numpy as np img=cv2.imread('images/03.jpeg',1)gray=cv2.cvtColor(img,cv2.COLOR_BGR2GRAY)cv2.imshow('before',gray)dst=cv2.equalizeHist(gray)cv2.imshow('now',dst)cv2.waitKey(10000)

彩色直方图均衡化

import cv2import numpy as np img=cv2.imread('images/03.jpeg',1)cv2.imshow('before',img)#因为直方图均衡化只接受单通道 所以需要对通道进行分解(b,g,r)=cv2.split(img)bH = cv2.equalizeHist(b)gH = cv2.equalizeHist(g)rH = cv2.equalizeHist(r)#分别均衡化之后 合成图片result = cv2.merge((bH,gH,rH)) cv2.imshow('now',result)cv2.waitKey(10000)

YUV直方图均衡化

import cv2import numpy as np from grpc import Channelimg=cv2.imread('images/03.jpeg',1)imgYUV =cv2.cvtColor(img,cv2.COLOR_BGR2YCrCb)#这个函数很厉害 还可以将 RGB图片 转换为 YUV图片cv2.imshow('before',img)channelsYUV =cv2.split(imgYUV)channelsYUV[0] =cv2.equalizeHist(channelsYUV[0])channels= cv2.merge(channelsYUV)#再把通道合并result =cv2.cvtColor(channels,cv2.COLOR_YCrCb2BGR)#YUV图片转换为RGBcv2.imshow('now',channels)cv2.waitKey(10000)

图片修补

既然图片需要修补,那么说明这张图片已经瓦特了,那么我们就像数学家一样思考问题,先把图片搞坏吧。

通过下面一些像素值的写入,图片已经被成功玩坏,并且,弄坏的是我弟弟的小脸蛋儿···哈哈哈哈哈

import cv2import numpy as np img=cv2.imread('images/03.jpeg',1)for i in range(200,300):img[i,300]=(255,255,255)img[i,300+1]=(255,255,255)img[i,300-1]=(255,255,255)for i in range(250,350):img[250,i]=(255,255,255)img[250+1,i]=(255,255,255) img[250+2,i]=(255,255,255) cv2.imwrite('06.jpg',img)cv2.imshow('now',img)cv2.waitKey(10000)

然后我弟弟非常不开心,希望我帮他修补,没办法,谁让我是哥哥··

import cv2import numpy as np img=cv2.imread('images/06.jpg',1)imgInfo=img.shapeheight= imgInfo[0]width=imgInfo[1]paint =np.zeros((height,width,1),np.uint8)#用for循环填充paint数组for i in range(200,300):paint [i,300]=255paint [i,300+1]=255paint[i,300-1]=255for i in range(250,350):paint[250,i]=255paint[250+1,i]=255paint[250+2,i]=255cv2.imshow('paint ',paint)#接下来图片修补imgdst = cv2.inpaint(img,paint,3,cv2.INPAINT_TELEA) cv2.imshow('now',imgdst)cv2.waitKey(10000)

左边是paint数组的内容,右边是修补之后的照片…整体效果感觉还算ok,仔细看还是可以看出来差别的,不过也算可以了。弟弟又可以去撩妹了。

总结来说,这个功能和我想象的还是有点不一样。

灰度直方图源码

本质:统计每个像素灰度 出现的概率 0-255 P

import cv2import numpy as np import matplotlib.pyplot as pltimg=cv2.imread('images/03.jpeg',1)imgInfo=img.shapeheight= imgInfo[0]width=imgInfo[1]gray= cv2.cvtColor(img,cv2.COLOR_BGR2GRAY)count = np.zeros(256,np.float) #统计每个灰度等级的个数for i in range(0,height):for j in range(0,width):pixel= gray[i,j]index =int(pixel)count[index]= count[index]+1#遍历256个灰度等级 for i in range(0,255):count[i] =count[i]/(height*width)#matplot绘图x= np.linspace(0,255,256) y=countplt.bar(x,y,0.9,alpha=1,color='b')plt.show()cv2.waitKey(10000)

彩色直方图源码

import cv2import numpy as np import matplotlib.pyplot as pltimg=cv2.imread('images/03.jpeg',1)imgInfo=img.shapeheight= imgInfo[0]width=imgInfo[1]countB= np.zeros(256,np.float)countG= np.zeros(256,np.float)countR= np.zeros(256,np.float)for i in range(0,height):for j in range(0,width):(b,g,r) = img [i,j]index_b= int(b)index_g= int(g)index_r= int(r) countB[index_b] =countB[index_b]+1countG[index_b] =countG[index_g]+1countR[index_b] =countR[index_r]+1for i in range(0,256):countB[i] = countB[i]/(height * width)countG[i] = countG[i]/(height * width)countR[i] = countR[i]/(height * width)x= np.linspace(0,255,256) #x轴坐标 y1=countBplt.bar(x,y1,0.9,alpha=1,color='b')y2=countGplt.bar(x,y2,0.9,alpha=1,color='g')y3=countRplt.bar(x,y3,0.9,alpha=1,color='r')plt.show()cv2.waitKey(10000)

本内容不代表本网观点和政治立场,如有侵犯你的权益请联系我们处理。
网友评论
网友评论仅供其表达个人看法,并不表明网站立场。