OpenCV作业及近阶段学习总结
作业描述

不太理解为啥不让用OpenCV的API,明明可以直接可以一行代码搞定。。。。。
numpy代码如下:
•均值滤波

import cv2
import numpy as np

# 均值滤波
def mean_filter(img, K_size=3):
    H, W, C = img.shape
    # zero padding
    pad = K_size // 2
    out = np.zeros((H + pad * 2, W + pad * 2, C), dtype=np.float)
    out[pad: pad + H, pad: pad + W] = img.copy().astype(np.float)
    tmp = out.copy()

    # 滤波过程
    for y in range(H):
        for x in range(W):
            for c in range(C):
                out[pad + y, pad + x, c] = np.mean(tmp[y: y + K_size, x: x + K_size, c])

    out = out[pad: pad + H, pad: pad + W].astype(np.uint8)

    return out

# 读取图像
img = cv2.imread("imori.jpg")
# 均值滤波
out = mean_filter(img, K_size=3)
# 保存结果
cv2.imwrite("out1.jpg", out)


•中值滤波

import cv2
import numpy as np


# 中值滤波
def median_filter(img, K_size=3):
    H, W, C = img.shape    
    pad = K_size // 2
    out = np.zeros((H + pad*2, W + pad*2, C), dtype=np.float)
    out[pad:pad+H, pad:pad+W] = img.copy().astype(np.float)
    tmp = out.copy()
    # 滤波过程
    for y in range(H):
        for x in range(W):
            for c in range(C):
                out[pad+y, pad+x, c] = np.median(tmp[y:y+K_size, x:x+K_size, c])

    out = out[pad:pad+H, pad:pad+W].astype(np.uint8)
    
    return out

# 读取图像
img = cv2.imread("imori_noise.jpg")
# 中值滤波
out = median_filter(img, K_size=3)
# 结果保存
cv2.imwrite("out2.jpg", out)

近阶段学习总结

一时间不知道该写什么了,先总结OpenCV学习的一些内容吧。

OpenCV更多的是对图像的处理,用起来确实很方便,基本上用几行代码就可以完成看似很难完成的工作。其中的知识点在原理方面感觉很难懂,每次学习原理的时候感觉这都是讲的啥?但是一到代码,看到讲了这么多,一两行代码就搞定了,人懵了。。。。

OpenCV的内容:

首先就是图像的基础操作:读取、显示、保存;绘制几何图形;获取像素点、属性等;还有几何变换、形态学操作、图像平滑、边缘检测、轮廓检测等方面的内容;后面在图像特征提取与描述方面,学习了一系列算法:Harris、shi-tomas实现角点检测;sift、sufr算法实现尺度不变特征转换;fast、orb算法提高了特征检测的效率;LBP和HOG特征算子用来描述图像局部特征;后面学习了opencv中的视频操作,主要利用meanshift和camshift算法;最后的人脸检测案例结束了opencv的学习。

近阶段的感悟:

CSDN博客是我使用最久的博客区域,在之前我尝试过利用git自己搭建属于自己的博客专区,但是打卡太卡了,后面我又尝试了简书、博客园等,但是总感觉用的人很少,每次我用百度搜索我不会的知识点时,CSDN的文章是第一个搜索结果,这样让我更加依赖CSDN了,并将它当做我记录学习过程的一个地方。

起初大一、大二、大三我是学习Java的,感觉刚刚踏入Java的大门,并且都打算以后从事这方面的工作;大三下学期准备考研,备考了9个月的时间,一度感觉考不上了,幸运的是大四上学期我被保送了研究生,然后选择的导师是从事深度学习、计算机视觉、人工智能等领域,我就明白我可能真要与Java说再见了。

从接触Python人工智能方面已经过了小半年了,刚开始一直不清楚学习的方向,甚至不明白人工智能、机器学习、深度学习的关系,还有Numpy、Pandas、SciPy、Scikit-Learn、Matplotlib的关系,一切都是那么的陌生!刚开始真的比较困难,但是一旦坚持走上这条路,就会发现后面的学习方向越来越清晰,一些关系网也更加的了如指掌。最开始学的Python入门,实际有了Java的基础,没必要一点一点的看,都是类似的代码;然后就是跟着唐宇迪的唐宇迪-python数据分析与机器学习实战学习了Numpy、Pandas、SciPy、Scikit-Learn、Matplotlib;之后就是机器学习的一些算法:分类算法:决策树、KNN、Adaboost、随机森林、朴素贝叶斯、XGboost等;聚类算法:KMeans、GMM、DBSCAN;还有PCA降维等一方面的内容。上述学起来确实很枯燥,算法甚至还不太懂,但是稍微了解其中的原理还是有必要的;后面跟着黑马的课程资料学习了深度学习:tensorflow、神经网络、损失函数、优化方法、正则化;进阶有卷积神经网络(CNN)。然后就是图像分类,目标检测、目标分割这些计算机视觉方面的内容及算法。再到最近几天学习的OpenCV及图像处理,让我感觉确实进入了人工智能的大门。

之后的一段时间(也许一两个月)就要暂时更新学习的内容了,因为学习到这已经给我毕业设计的实现提供了方向和技术基础,接下来的一段时间就要专心完成毕业设计及论文写作,学习永无止境,希望大家在学习的道路上一步步变强,早日成为大佬,哈哈哈哈!