OpenCV图像处理:从入门到实战技巧

OpenCV 图像处理入门:从基础到实战技巧

安装与基础环境配置

OpenCV 可以通过 pip 直接安装,推荐使用 Python 3.7 及以上版本:

pip install opencv-python

如果需要扩展模块(如 contrib 包):

pip install opencv-contrib-python

验证安装是否成功:

import cv2
print(cv2.__version__)

图像读取与显示

使用 cv2.imread() 读取图像,支持常见格式(JPG、PNG 等):

img = cv2.imread('image.jpg', cv2.IMREAD_COLOR)  # 彩色模式
gray_img = cv2.imread('image.jpg', cv2.IMREAD_GRAYSCALE)  # 灰度模式

显示图像:

cv2.imshow('Image Window', img)
cv2.waitKey(0)  # 等待按键关闭窗口
cv2.destroyAllWindows()

图像基本操作

颜色空间转换(BGR ? RGB/GRAY/HSV):

rgb_img = cv2.cvtColor(img, cv2.COLOR_BGR2RGB)
hsv_img = cv2.cvtColor(img, cv2.COLOR_BGR2HSV)

调整图像尺寸:

resized_img = cv2.resize(img, (width, height), interpolation=cv2.INTER_LINEAR)

ROI(Region of Interest)提取:

roi = img[y1:y2, x1:x2]  # 矩形区域裁剪

图像滤波与增强

高斯模糊去噪:

blurred = cv2.GaussianBlur(img, (5, 5), 0)  # 核大小为 5x5

边缘检测(Canny 算法):

edges = cv2.Canny(img, threshold1=50, threshold2=150)

直方图均衡化(提升对比度):

gray_img = cv2.cvtColor(img, cv2.COLOR_BGR2GRAY)
equalized = cv2.equalizeHist(gray_img)

特征检测与匹配

SIFT 特征点检测:

sift = cv2.SIFT_create()
keypoints, descriptors = sift.detectAndCompute(gray_img, None)

ORB 快速特征匹配:

orb = cv2.ORB_create()
kp1, des1 = orb.detectAndCompute(img1, None)
kp2, des2 = orb.detectAndCompute(img2, None)
bf = cv2.BFMatcher(cv2.NORM_HAMMING, crossCheck=True)
matches = bf.match(des1, des2)

实战案例:人脸检测

使用预训练 Haar 级联分类器:

face_cascade = cv2.CascadeClassifier('haarcascade_frontalface_default.xml')
faces = face_cascade.detectMultiScale(gray_img, scaleFactor=1.1, minNeighbors=5)
for (x, y, w, h) in faces:
    cv2.rectangle(img, (x, y), (x+w, y+h), (255, 0, 0), 2)

性能优化技巧

  1. 使用 cv2.UMat 加速运算(自动启用 OpenCL):
umat_img = cv2.UMat(img)
processed = cv2.GaussianBlur(umat_img, (5, 5), 0)
  1. 避免循环操作,优先使用 OpenCV 内置函数(如 cv2.add() 比逐像素加法快 10 倍以上)。

  2. 对于视频处理,设置 cv2.CAP_PROP_FPS 控制帧率以减少计算量。

常见问题解决

  1. 图像显示为纯色:检查通道顺序(OpenCV 默认 BGR 而非 RGB)。

  2. 特征匹配效果差:尝试调整 ratio test 参数或改用 FLANN 匹配器。

  3. 内存泄漏:确保及时调用 cv2.destroyAllWindows() 释放资源。

扩展学习建议

  1. 深入理解图像卷积原理,手动实现简单滤波器(如 Sobel 算子)。

  2. 结合 NumPy 进行矩阵操作,例如:

mask = np.zeros_like(img)
cv2.fillPoly(mask, [vertices], (255, 255, 255))
masked_img = cv2.bitwise_and(img, mask)
  1. 探索深度学习模块(DNN),加载预训练模型如 YOLO 或 MobileNet。

BbS.okane448.info/PoSt/1121_323402.HtM
BbS.okane449.info/PoSt/1121_805923.HtM
BbS.okane450.info/PoSt/1121_799823.HtM
BbS.okane451.info/PoSt/1121_336849.HtM
BbS.okane452.info/PoSt/1121_334622.HtM
BbS.okane453.info/PoSt/1121_750563.HtM
BbS.okane454.info/PoSt/1121_289734.HtM
BbS.okane455.info/PoSt/1121_894885.HtM
BbS.okane456.info/PoSt/1121_696571.HtM
BbS.okane457.info/PoSt/1121_982068.HtM
BbS.okane448.info/PoSt/1121_183190.HtM
BbS.okane449.info/PoSt/1121_028440.HtM
BbS.okane450.info/PoSt/1121_559328.HtM
BbS.okane451.info/PoSt/1121_141140.HtM
BbS.okane452.info/PoSt/1121_692681.HtM
BbS.okane453.info/PoSt/1121_269811.HtM
BbS.okane454.info/PoSt/1121_844387.HtM
BbS.okane455.info/PoSt/1121_423945.HtM
BbS.okane456.info/PoSt/1121_861630.HtM
BbS.okane457.info/PoSt/1121_383349.HtM
BbS.okane448.info/PoSt/1121_938838.HtM
BbS.okane449.info/PoSt/1121_861468.HtM
BbS.okane450.info/PoSt/1121_454213.HtM
BbS.okane451.info/PoSt/1121_338519.HtM
BbS.okane452.info/PoSt/1121_722222.HtM
BbS.okane453.info/PoSt/1121_428120.HtM
BbS.okane454.info/PoSt/1121_814629.HtM
BbS.okane455.info/PoSt/1121_877764.HtM
BbS.okane456.info/PoSt/1121_807000.HtM
BbS.okane457.info/PoSt/1121_905426.HtM
BbS.okane448.info/PoSt/1121_298154.HtM
BbS.okane449.info/PoSt/1121_734122.HtM
BbS.okane450.info/PoSt/1121_646255.HtM
BbS.okane451.info/PoSt/1121_094388.HtM
BbS.okane452.info/PoSt/1121_535914.HtM
BbS.okane453.info/PoSt/1121_672194.HtM
BbS.okane454.info/PoSt/1121_053532.HtM
BbS.okane455.info/PoSt/1121_720579.HtM
BbS.okane456.info/PoSt/1121_259734.HtM
BbS.okane457.info/PoSt/1121_308701.HtM
BbS.okane448.info/PoSt/1121_691786.HtM
BbS.okane449.info/PoSt/1121_012183.HtM
BbS.okane450.info/PoSt/1121_709303.HtM
BbS.okane451.info/PoSt/1121_121462.HtM
BbS.okane452.info/PoSt/1121_841598.HtM
BbS.okane453.info/PoSt/1121_970471.HtM
BbS.okane454.info/PoSt/1121_219293.HtM
BbS.okane455.info/PoSt/1121_560091.HtM
BbS.okane456.info/PoSt/1121_225091.HtM
BbS.okane457.info/PoSt/1121_604427.HtM
BbS.okane448.info/PoSt/1121_220496.HtM
BbS.okane449.info/PoSt/1121_878853.HtM
BbS.okane450.info/PoSt/1121_539608.HtM
BbS.okane451.info/PoSt/1121_253509.HtM
BbS.okane452.info/PoSt/1121_402971.HtM
BbS.okane453.info/PoSt/1121_389259.HtM
BbS.okane454.info/PoSt/1121_485898.HtM
BbS.okane455.info/PoSt/1121_347405.HtM
BbS.okane456.info/PoSt/1121_764534.HtM
BbS.okane457.info/PoSt/1121_988366.HtM
BbS.okane448.info/PoSt/1121_981743.HtM
BbS.okane449.info/PoSt/1121_785214.HtM
BbS.okane450.info/PoSt/1121_435644.HtM
BbS.okane451.info/PoSt/1121_146086.HtM
BbS.okane452.info/PoSt/1121_462487.HtM
BbS.okane453.info/PoSt/1121_616827.HtM
BbS.okane454.info/PoSt/1121_872223.HtM
BbS.okane455.info/PoSt/1121_221440.HtM
BbS.okane456.info/PoSt/1121_550385.HtM
BbS.okane457.info/PoSt/1121_129457.HtM
BbS.okane448.info/PoSt/1121_641530.HtM
BbS.okane449.info/PoSt/1121_508107.HtM
BbS.okane450.info/PoSt/1121_607144.HtM
BbS.okane451.info/PoSt/1121_703405.HtM
BbS.okane452.info/PoSt/1121_205824.HtM
BbS.okane453.info/PoSt/1121_630361.HtM
BbS.okane454.info/PoSt/1121_601569.HtM
BbS.okane455.info/PoSt/1121_196458.HtM
BbS.okane456.info/PoSt/1121_970510.HtM
BbS.okane457.info/PoSt/1121_648430.HtM

#牛客AI配图神器#

全部评论

相关推荐

飞屋一号:包住还有每工作日餐补,已经比很多公司的实习强了吧
点赞 评论 收藏
分享
11-10 14:15
吉林建筑大学
这个名称和你无缘:二本还想上桌 , 宁愿要9非科班也不要二本
秋招白月光
点赞 评论 收藏
分享
程序员牛肉:你这简历有啥值得拷打的?在牛客你这种简历一抓一大把,也就是个人信息不一样而已。 关键要去找亮点,亮点啊,整个简历都跟流水线生产出来的一样。
点赞 评论 收藏
分享
被前mentor说进不了TME,现在转正了。我有两段实习,前一段也是在一个音乐平台,回想起来,实习开局颇为不顺,第一个月对业务不熟导致一些差错。单聊时被mentor压力,说我产出不够,转正困难。后面他问我想进哪一个公司,反正留不下,我直接说腾讯音乐,他说我进不了腾讯音乐。本来打算熬够3个月,够刷一段简历就走,和mentor聊完,立马提桶跑路了,还浪费了我宜家200块买的小床垫。一、回学校就抓紧投了TME,还真拿了实习的offer。开始实习的时候,就一个状态,什么都无所谓,先立flag:在TME实习,存活且转正。mentor接我到工位,并且在中午请我吃了第一餐,豪刺!我的mentor是常说的那种从学历智商到工作能力,完全向下兼容我,但依然提供超级多情绪价值的人。这里的氛围是真爱夸夸啊,看到我干点什么小事儿或者提出点什么想法都能夸一句,属实给我情绪价值拉满了,搞得还有点不好意思到点下班(不可能本小老鼠已经要上天堂了,具体表现为每天上班都很积极,平时组里开会也大家都会带我去听。众所周知,实习生穷的一批,但靠着各位榜一的慷慨过得还不错。具体表现为组里有羊毛就薅,没有羊毛就要(bushi表现为mentor会经常带我中午去吃好吃的,同事们也常常投喂。我的岗位是做算法的,现在TME不少团队都在做AI,所以组里每周都会有一个前沿分享会,分头一起看点论文分享热点,一起讨探讨一些和业务不是那么直接相关的前沿问题。这个体验还是蛮好的,每周这个时候我都有点恍惚,到底是不是在学校。我在的组感觉哥哥姐姐们都是高能量人群,下班之后都忙着去玩自己的事儿,大家都很chill(没什么内卷,把想来扣在评论区)二、实习到转正到现在,发现会上班真的是一种能力!mentor 教我发脾气,为我兜底也让我松弛了。“你不需要这么 nice的”“这样的情况该怼就怼,不要憋气”也教我抓住机会,他在旁边给我兜底。我想多锻炼,mentor甚至专门去找leader要了点活过来给我。经过熟悉后,便开始交给我做具体的业务开发,我目前做的是音乐软件的搜索和推荐功能。具体说说就是当用户搜索某首歌曲时,系统需要智能展示其不同版本,在推荐场景中,则需要准确识别用户偏好并推送可能感兴趣的歌曲。我深刻地体会到了一段好的实习是无论你做什么分析和策略,背后都有人能给出客观的建议和有力的托举,通过own一些项目去成长,最有成就感的莫过于最终取得收益并推全的那一刻,和转正答辩通过的那一刻,好幸运能体验到这些!确实不是每个人都能轻松获得理想的实习机会,但还是要试着为自己创造可能。另外,心态调整也很关键。现在能拿到offer本身就不容易,甚至我身边不少同学到现在还在积极求职。三、下面分享一些我认为对成功转正有帮助的tips!!关键:确认headcount建议面试就问,到实习中期也找合适的机会主动问问mt或hr。如果这个岗位不是明确有转正,要表达你想留下来的意愿,试探有没有机会。一定厚脸皮问!这关系到你后面几个月的努力方向。一旦确定有hc,就尽快搞清楚转正需要满足哪些条件:比如实习天数、答辩流程、考核标准。心中有数,平时工作的时候也能有意识地去积累相关案例和数据。实习期间:谁不喜欢一个靠谱、主动、还有自己想法的实习生呢交给自己的事,尽量做到“事事有回应”,搞清楚需求再动手,明确交付时间和形式;我习惯把长期任务拆成几个阶段,每个节点都找导师对一下思路和框架,避免跑偏;定期主动沟通进度,简单复盘近期工作,也和同事保持友好交流,这些小事也很加分。答辩那天:人设!人设立出来(自己的记忆点)我的答辩框架(供参考:简单介绍自己(背景+实习岗位)整体工作概述重点讲1-2个项目(突出自己的角色和贡献)复盘与反思(学到了什么、哪些可以做得更好)未来的规划(想在这个岗位上成长为什么样的人)答辩前也可以提前准备一些常见问题的回答,比如:你觉得这个岗位最需要什么能力?实习中遇到最大的困难是什么?怎么解决的?你觉得自己最大的优势是什么?未来想在哪个方向深耕?!还有backup选项万一转正没通过,也别慌忙放弃。可以问问部门内部或者其他团队有没有校招hc,争取被推荐到其他岗位。很多同学都是通过内部推荐成功上岸的,近水楼台先得月!最后,无论大家拿到什么样的offer,都试着用积极的心态去面对和适应吧,之后再根据实际情况逐步调整、改变,毕竟世界上唯一不变的是变化本身。
__never_mi...:TME 感觉真不错吧
腾讯音乐娱乐集团成长空间 274人发布
点赞 评论 收藏
分享
评论
点赞
收藏
分享

创作者周榜

更多
牛客网
牛客网在线编程
牛客网题解
牛客企业服务