Opencv简单图像处理(一)

15 篇文章 3 订阅
6 篇文章 1 订阅

前言

最近对图像处理方面比较感兴趣,所以记录一下自己的学习过程同时也分享自己的学习结果。对于Opencv是图像处理里面不可或缺的一部分,所以我就使用Opencv来简单处理一张图片,图片来自我的最爱《权力的游戏》

读取原图并打印

下面代码直接读取图片然后进行打印,这里有两种输出方式,第一种是用非CV库的方式输出,所以一定要加我注释的那句话,不然R,G,B颜色顺序可能是乱的;第二种就不需要了,但是要加最后一句话,不然输出可能会卡或者一闪而过!

import cv2
import numpy as np
from matplotlib import pyplot as plt
img = cv2.imread('qy.jpg',1)	#注意图片的名称最好不要是中文,不然可能会报错
#第一种输出方式
img = cv2.cvtColor(img , cv2.COLOR_BGR2RGB)	#这句一定要加,不然输出图片颜色可能不对
plt.imshow(img )   
#第二种输出方式
#cv2.imshow('img',img)	
#cv2.waitKey(0)  #这句也要加   

下面就是打印的图片:
在这里插入图片描述

将原图转化为灰度图

转化为灰度图没什么变化,只需要在读取的时候将flags取值为0就行了

img = cv2.imread('qy.jpg',0)	#0是flags的取值
img = cv2.cvtColor(img , cv2.COLOR_BGR2RGB)	
plt.imshow(img )   

输出结果如下:
在这里插入图片描述

灰度图像反转

灰度图像每个像素点色彩范围在0-255之间,反转方法直接将255-当前像素值即可

img = cv2.imread('qy.jpg',0)
height, width = img.shape
img_change = np.zeros((height,width,1), np.uint8)
for i in range(0, height):
    for j in range(0, width):
        gray = img[i, j]
        img_change[i, j] = 255-gray
img_change = cv2.cvtColor(img_change, cv2.COLOR_BGR2RGB)        
plt.imshow(img_change) 

输出结果如下图:
在这里插入图片描述

彩色图像反转

彩色图像的反转和灰度反转是一样的,只需要将R,G,B三原色的色调反转即可

img = cv2.imread('qy.jpg',1)
height, width, mode = img.shape
img_change = np.zeros((height, width, mode), np.uint8)
for i in range(0, height):
    for j in range(0,width):
        (b, g, r) = img[i, j]
        img_change[i, j] = (255-b,255-g,255-r)
img_change = cv2.cvtColor(img_change, cv2.COLOR_BGR2RGB)        
plt.imshow(img_change)  

输出结果如下图:
在这里插入图片描述

图像对数变换

我们知道其实在处理数据的过程中也经常用到对数变换,对数变换可以将“陡”的数据变得平滑。对数曲线在像素值较低的区域斜率大,在像素值较高的区域斜率较小,所以图像经过对数变换后,较暗区域的对比度将有所提升,所以就可以增强图像的暗部细节。一句话就是可以把暗的调亮。当然出了对数变换还有其他的变换,这里就不举例了。

def log(c, img):
    output = c * np.log(1.0 + img)
    output = np.uint8(output + 0.5)
    return output    
img = cv2.imread('qy.jpg',1)
img_output = log(43, img)	#这里的c值要设得合适,不然图像会变得很花,不要问我怎么知道的
img_output = cv2.cvtColor(img_output, cv2.COLOR_BGR2RGB)        
plt.imshow(img_output) 

输出结果如下图:
在这里插入图片描述

图像直方图均衡化

首先灰度图像和彩色图像都可以进行直方图均衡化,因为我选择的图片在灰度均衡化什么看不出什么效果,所以这里就举彩色图的例子。

img = cv2.imread('qy.jpg',flags=1)
(b,g,r) = cv2.split(img) 
bH = cv2.equalizeHist(b)	#这里主要就是这个equalizeHist函数进行均衡化
gH = cv2.equalizeHist(g)
rH = cv2.equalizeHist(r)
result = cv2.merge((bH,gH,rH))
res = np.hstack((img,result))
res = cv2.cvtColor(res, cv2.COLOR_BGR2RGB)
plt.imshow(res)
plt.show()

均衡化后效果图:
在这里插入图片描述
还是可以看出明显的区别
而我们也可以通过图片灰度直方图看出差别,均衡化后的图片更加趋于平滑
均衡化前:

在这里插入图片描述
均衡化后:
在这里插入图片描述

写在最后

这是学习Opencv基础的第一篇,后面会再有一篇。本人才疏学浅,如果有错误或者理解不到位的地方请指正!

  • 7
    点赞
  • 9
    收藏
    觉得还不错? 一键收藏
  • 12
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 12
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值