【图像处理】镜头去污渍(未完全实现):python + OpenCV

news/2024/7/21 7:02:12 标签: opencv, python, 图像处理

接上之前的个人面部数据集制作

个人面部数据集制作,opencv + python + C++_子根的博客-CSDN博客

引言

用笔记本的摄像头拍的面部数据,脸占整个图片的比例太小,如果太靠前摄像头眼镜又难受,所以用家里闲置的摄像头来拍,自己想摆什么POSS都行。

但是那个摄像头有点坏坏的,所以出街买了502胶水将它粘好,然后通电,发现胶水渗进镜头里去了,拍出来的图片带有污渍阴影,所以想呀图像处理的方法改善一下图片质量。

代码的思路是,先将源图每个通道【R、G、B】进行中值滤波一下,然后将污渍图片的每个通道进行高斯滤波(尽可能大),最后将处理过后的源图通道减去处理过后的污渍通道

 代码

python">import cv2

a = cv2.imread('F:/face/2.png')
(b, g, r) = cv2.split(a)
a_bH = cv2.medianBlur(b,1)
a_gH = cv2.medianBlur(g,1)
a_rH = cv2.medianBlur(r,1)
a = cv2.merge((a_bH, a_gH, a_rH))

b = cv2.imread('F:/face/aaa.png',1)
(b, g, r) = cv2.split(b)
b_bH = cv2.GaussianBlur(b,(35,35),0)
b_gH = cv2.GaussianBlur(g,(35,35),0)
b_rH = cv2.GaussianBlur(g,(35,35),0)
b = cv2.merge((b_bH, b_gH, b_rH))

bh = a_bH - b_bH
gh = a_gH - b_gH
rh = a_rH - b_rH

c = cv2.merge((bh, gh, rh))

# c = cv2.bitwise_and(a,b)
# c = cv2.subtract(a, c)

cv2.imshow('1', a)
cv2.imshow('2', b)
cv2.imshow('3', c)

cv2.waitKey()
cv2.destroyAllWindows()

结果

 

效果还是有的,只是不太理想,比如说空白背景也被减掉了,显示成红色的了,不过影响不大(希望吧) 

参考博客:

python+opencv均值滤波,高斯滤波,中值滤波,双边滤波_月下花弄影的博客-CSDN博客_opencv python 高斯滤波

python+opencv直方图均衡化_我是小蚂蚁的博客-CSDN博客_opencv 直方图均衡化 


http://www.niftyadmin.cn/n/975109.html

相关文章

【图像分类】实现猫狗图片的训练集和测试集的分类:python + Asirra

数据集下载地址为 Dogs vs. Cats | Kaggle 下载下来的图片包是,包含有猫狗的图片,但是命名方式就是以猫狗来命名的,所以我们可以很快将他们分类出来,并把他们以90%作为训练集,剩下的作为 测试集 前期准备工作&#xf…

面试题16:数值的整数次方

面试题16:数值的整数次方 实现 pow(x, n) ,即计算 x 的 n 次幂函数(即,xn)。不得使用库函数,同时不需要考虑大数问题。 // 简单算法 class Solution { public:double myPow(double x, int n) {if(x0 &…

【DeepDream】,代码简单记录

参考源代码GitHub: Deep-Dream/resnet.py at master L1aoXingyu/Deep-Dream GitHub 但是如果运行里面的代码的话,会报错: TypeError: __init__() takes from 3 to 5 positional arguments but 9 were given 所以改了一下,让它…

Effective_STL 学习笔记(三十九) 用纯函数做判断式

1. 判断式是返回 bool (或者其他隐式转换为 bool 的东西)。判断式在 STL 中广泛使用。标准关联容器的比较函数是判断式,判断式函数常常作为参数传给算法,比如 find_if 和多种排序算法。 2. 纯函数是返回值只依赖于参数的函数。如果…

面试题17:打印从1到最大的n位数

面试题17&#xff1a;打印从1到最大的n位数 输入数字 n&#xff0c;按顺序打印出从 1 到最大的 n 位十进制数。比如输入 3&#xff0c;则打印出 1、2、3 一直到最大的 3 位数 999。 // 不考虑大数问题 class Solution { public:vector<int> printNumbers(int n) {vecto…

【报错】:RuntimeError: Trying to backward through the graph a second time, but the saved intermediate re

错误问题&#xff1a; RuntimeError: Trying to backward through the graph a second time, but the saved intermediate results have already been freed. Specify retain_graphTrue when calling .backward() or autograd.grad() the first time.这个错误&#xff0c;一般…

获取model的自定义特性

class Program{static void Main(String[] args){var t typeof(A);var pName t.GetProperty("Name");//4.0或以上版本var displayName pName.GetCustomAttribute<DisplayNameAttribute>();Console.WriteLine(displayName.DisplayName);Console.ReadKey();}}…

【私人笔记】:C++

指针&#xff1a; int a 12; int *p &a&#xff1b; cout << p <<endl;输出&#xff1a;00B6F734 //**************************************** //****************************************cout << *p <<endl; 输出&#xff1a;12 const修饰指…