OpenCV:使用python

阅读: 评论:0

OpenCV:使用python

OpenCV:使用python

文章目录

    • 1.图片修补
    • 2.亮度增强
    • 3.磨皮美白
    • 4.高斯均值滤波
    • 5.中值滤波

1.图片修补

首先得到一个损坏的图像:

import cv2
import numpy as np
img = cv2.imread('img.jpg', 1)
for i in range(100,200):img[i, 200] = (255,255,255)img[i, 200+1] = (255,255,255)img[i, 200-1] = (255,255,255)
for i in range(150,250):img[150,i] = (255,255,255)img[150+1,i] = (255,255,255)img[150-1,i] = (255,255,255)
cv2.imwrite('damaged.jpg', img)
cv2.imshow('image', img)
cv2.waitKey(0)

我们使用cv2.inpaint来实现图像的修复

第一个参数为要修复的图片,第二个参数为要修复的位置信息

import cv2
import numpy as np
img = cv2.imread('damaged.jpg', 1)
paint = np.zeros((img.shape[0], img.shape[1], 1), np.uint8)
for i in range(100,200):paint[i, 200] = 255paint[i, 200+1] = 255paint[i, 200-1] = 255
for i in range(150,250):paint[150,i] = 255paint[150+1,i] = 255paint[150-1,i] = 255
cv2.imshow('paint', paint)
imgDat = cv2.inpaint(img, paint, 3, cv2.INPAINT_TELEA)
cv2.imshow('imgDat', imgDat)
cv2.waitKey(0)

2.亮度增强

原理:将原来的像素点数值增加来增强亮度

import cv2
import numpy as np
img = cv2.imread('img.jpg', 1)
cv2.imshow('img', img)
dat = np.zeros(img.shape, np.uint8)
for i in range(img.shape[0]):for j in range(img.shape[1]):(b,g,r) = img[i,j]b = int(b) + 40 if int(b) + 40 < 255 else 255g = int(g) + 40 if int(g) + 40 < 255 else 255 r = int(r) + 40 if int(r) + 40 < 255 else 255dat[i,j] = (b,g,r)
cv2.imshow('dat',dat)
cv2.waitKey(0)

样例2:取图像中各个像素点的颜色通道,让不同的颜色通道乘以不同的比例后加一个数值得到美化图像

import cv2
import numpy as np
img = cv2.imread('img.jpg', 1)
cv2.imshow('img', img)
dat = np.zeros(img.shape, np.uint8)
for i in range(img.shape[0]):for j in range(img.shape[1]):(b,g,r) = img[i,j]r = int(r * 1.2) + 10 if int(r * 1.2) + 10 < 255 else 255g = int(g * 1.2) + 10 if int(g * 1.2) + 10 < 255 else 255 dat[i,j] = (b,g,r)
cv2.imshow('dat',dat)
cv2.waitKey(0)

3.磨皮美白

双边滤波(Bilateral filter) 是一种非线性的滤波方法,是结合图像的空间邻近度和像素值相似度的一种折中处理,同时考虑空域信息和灰度相似性,达到保边去噪的目的。具有简单、非迭代、局部的特点 [1] 。双边滤波器的好处是可以做边缘保存(edge preserving),一般过去用的维纳滤波或者高斯滤波去降噪,都会较明显地模糊边缘,对于高频细节的保护效果并不明显。

双边滤波器顾名思义比高斯滤波多了一个高斯方差sigma-d,它是基于空间分布的高斯滤波函数,所以在边缘附近,离的较远的像素不会太多影响到边缘上的像素值,这样就保证了边缘附近像素值的保存。但是由于保存了过多的高频信息,对于彩色图像里的高频噪声,双边滤波器不能够干净的滤掉,只能够对于低频信息进行较好的滤波

下面我们来使用双边滤波 cv2.bilateralFilter 来实现图像的磨皮美白方法

import cv2
img = cv2.imread("img2.jpg", 1)
cv2.imshow('img', img)
dat = cv2.bilateralFilter(img, 15,35,35)
cv2.imshow('dat',dat)
cv2.waitKey(0)


4.高斯均值滤波

高斯滤波是一种线性平滑滤波,适用于消除高斯噪声,广泛应用于图像处理的减噪过程。 [1] 通俗的讲,高斯滤波就是对整幅图像进行加权平均的过程,每一个像素点的值,都由其本身和邻域内的其他像素值经过加权平均后得到。高斯滤波的具体操作是:用一个模板(或称卷积、掩模)扫描图像中的每一个像素,用模板确定的邻域内像素的加权平均灰度值去替代模板中心像素点的值。

缺点:得到的图像会变得非常模糊

import cv2
img = cv2.imread("img.jpg", 1)dat = cv2.GaussianBlur(img, (5,5), 1, 5)
cv2.imshow('img', img)
cv2.imshow('dat', dat)
cv2.waitKey(0)


均值滤波

均值滤波是典型的线性滤波算法,它是指在图像上对目标像素给一个模板,该模板包括了其周围的临近像素(以目标像素为中心的周围8个像素,构成一个滤波模板,即包括目标像素本身),再用模板中的全体像素的平均值来代替原来像素值

import cv2
import numpy as np
img = cv2.imread("img.jpg", 1)
dat = np.zeros(img.shape, np.uint8)
for i in range(img.shape[0]):for j in range(img.shape[1]):sumb,sumg,sumr = 0,0,0for m in range(-3,3):for n in range(-3,3):if i + m >= 0 and i + m < img.shape[0] and j + n >= 0 and j + n < img.shape[1]:(b,g,r) = img[i + m, j + n]sumb += int(b)sumg += int(g)sumr += int(r)b = np.uint8(sumb / 36)g = np.uint8(sumg / 36)r = np.uint8(sumr / 36)dat[i, j] = (b,g,r)
cv2.imshow('img', img)
cv2.imshow('dat', dat)
cv2.waitKey(0)

5.中值滤波

import cv2
import numpy as np
img = cv2.imread("img.jpg", 1)
img = cv2.cvtColor(img, cv2.COLOR_RGB2GRAY)
dat = np.zeros((img.shape[0],img.shape[1]), np.uint8)
cv2.imshow("img", img)for i in range(img.shape[0]):for j in range(img.shape[1]):collect = []for m in range(-1, 2):for n in range(-1,2):if i + m >= 0 and i + m < img.shape[0] and j + n >= 0 and j + n < img.shape[1]:gray = img[i + m, j + n]collect.append(gray)collect.sort()if(len(collect) != 0):dat[i,j] = collect[len(collect) // 2]
cv2.imshow('dat', dat)
cv2.waitKey(0)


本文发布于:2024-01-29 06:19:27,感谢您对本站的认可!

本文链接:https://www.4u4v.net/it/170648037613308.html

版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系,我们将在24小时内删除。

标签:OpenCV   python
留言与评论(共有 0 条评论)
   
验证码:

Copyright ©2019-2022 Comsenz Inc.Powered by ©

网站地图1 网站地图2 网站地图3 网站地图4 网站地图5 网站地图6 网站地图7 网站地图8 网站地图9 网站地图10 网站地图11 网站地图12 网站地图13 网站地图14 网站地图15 网站地图16 网站地图17 网站地图18 网站地图19 网站地图20 网站地图21 网站地图22/a> 网站地图23