目的

  • 分享学习心得,从实操中学习图像的前处理。代码直接跑,什么都不用改,如果网址失效,直接换网址即可。

- imageio==2.6.0 用来读取网址图片
- cv2==3.2.14 图像操作
- numpy==1.19.0
  • 获取图片
import imageio # 可以从网址中读取图片的库 --> pip install imageio
import cv2
file_path = "http://img.mp.itc.cn/upload/20170206/3cbd5b8834df4b409d289d9d8d50530a_th.jpg"
img = imageio.imread(file_path)
img = cv2.cvtColor(img,cv2.COLOR_RGB2BGR) # 读取的是RGB通道,转成opencv的BGR通过
cv2.imwrite("cat.jpg",img )
cv2.imshow("cat", img)
cv2.waitKey(0)
cv2.destroyAllWindows()

  • 图片分通道
# 图片分通道 -->B,G,R
import imageio
import cv2
file_path = "http://img.mp.itc.cn/upload/20170206/3cbd5b8834df4b409d289d9d8d50530a_th.jpg"
img = imageio.imread(file_path)
img = cv2.cvtColor(img,cv2.COLOR_RGB2BGR) # 读取的是RGB通道,转成opencv的BGR通道
img = cv2.resize(img,(360,640))  # 更改大小,便于显示
b,g,r = cv2.split(img)  # 图片分通道
# img_1 = cv2.merge((b, g, r))  # 分割后的通道合并
bgr = np.hstack((b,g,r))  # 图片矩阵并排显示
cv2.imwrite("split.jpg",bgr )
cv2.imshow("split",bgr)
cv2.waitKey(0)
cv2.destroyAllWindows()

  • 形态学——腐蚀膨胀
import imageio
import cv2
file_path = "http://1824.img.pp.sohu.com.cn/images/blog/2009/7/21/21/16/1234ab28e28g214.jpg"
img = imageio.imread(file_path)
img = cv2.cvtColor(img,cv2.COLOR_RGB2BGR)
kernel = (7,7)  # 腐蚀或膨胀的程度
erode = cv2.erode(img, kernel, iterations=20)  # 腐蚀操作
dilate = cv2.dilate(img, kernel, iterations=20)  # 膨胀操作
result = np.hstack((img,erode,dilate)) # 原图 - 腐蚀 - 膨胀
cv2.imwrite("erode_dilate.jpg",result)
cv2.imshow("result",result)
cv2.waitKey(0)
cv2.destroyAllWindows()

  • 形态学——开运算,闭运算
import numpy as np
import imageio
import cv2
file_path = "https://img.pconline.com.cn/images/photoblog/9/7/3/6/9736422/20099/21/1253523872358_mthumb.jpg"
img = imageio.imread(file_path)
img = cv2.cvtColor(img,cv2.COLOR_RGB2BGR)
img = cv2.resize(img,(360,360))
kernel = (7,7)  # 腐蚀或膨胀的程度
opens = cv2.morphologyEx(img, cv2.MORPH_OPEN, kernel, iterations=20) # 开运算 -->先腐蚀再膨胀
close = cv2.morphologyEx(img, cv2.MORPH_CLOSE, kernel, iterations=20) # 闭运算 -->先膨胀再腐蚀
result = np.hstack((img,opens,close)) # 原图 - 开运算 - 闭运算
cv2.imwrite("open_close.jpg",result)
cv2.imshow("result",result)
cv2.waitKey(0)
cv2.destroyAllWindows()

  • 边缘检测——sobel
import numpy as np
import imageio
import cv2
file_path = "http://img.mp.itc.cn/upload/20170206/3cbd5b8834df4b409d289d9d8d50530a_th.jpg"
img = imageio.imread(file_path)
img = cv2.cvtColor(img,cv2.COLOR_RGB2BGR)
img = cv2.resize(img,(360,640))
sobelx = cv2.Sobel(img, ddepth=cv2.CV_32F, dx=1, dy=0, ksize=3) # 延x方向检测
sobely = cv2.Sobel(img, ddepth=cv2.CV_32F, dx=0, dy=1, ksize=3) # 延y方向检测
# sobelxy = cv2.Sobel(img, ddepth=cv2.CV_32F, dx=1, dy=1, ksize=3) # 也可以直接x-y一起sobel,但一般效果没有分开处理的好
convx = cv2.convertScaleAbs(sobelx) #
convy = cv2.convertScaleAbs(sobely)
sobel = cv2.addWeighted(convx, 0.5, convy, 0.5, 0)
res = np.hstack((img, convx, convy, sobel)) # 原图 - sobelx - sobely - sobel
cv2.imwrite("sobel.jpg",res)
cv2.imshow('res', res)
cv2.waitKey(0)
cv2.destroyAllWindows()

  • 边缘检测——canny
import numpy as np
import imageio
import cv2
file_path = "http://img.mp.itc.cn/upload/20170206/3cbd5b8834df4b409d289d9d8d50530a_th.jpg"
img = imageio.imread(file_path)
img = cv2.cvtColor(img,cv2.COLOR_RGB2BGR)
img = cv2.cvtColor(img,cv2.COLOR_BGR2GRAY)
img = cv2.resize(img,(360,640))
print(img.shape)
# thresh1和thresh2可以根据实际图片情况更改
thresh1 = 0
thresh2 = 125
canny = cv2.Canny(img, thresh1, thresh2)
print(canny.shape)
result = np.hstack((img,canny))
cv2.imwrite("canny.jpg",result)
cv2.imshow('res', result)
cv2.waitKey(0)
cv2.destroyAllWindows()

  • 图像金字塔
# 上采样
import numpy as np
import imageio
import cv2
file_path = "http://img.mp.itc.cn/upload/20170206/3cbd5b8834df4b409d289d9d8d50530a_th.jpg"
original = imageio.imread(file_path)
img = cv2.cvtColor(original,cv2.COLOR_RGB2BGR)
# 下采样
down1 = cv2.pyrDown(img,(int(img.shape[0]/2),int(img.shape[1]/2)))
down2 = cv2.pyrDown(down1,(int(img.shape[0]/4),int(img.shape[1]/4)))
# # 上采样
# up1 = cv2.pyrUp(img,(int(img.shape[0]/2),int(img.shape[1]/2)))
# up2 = cv2.pyrUp(up1 ,(int(img.shape[0]/4),int(img.shape[1]/4)))
cv2.imwrite("original.jpg",img)
cv2.imwrite("down1.jpg",down1)
cv2.imwrite("down2.jpg",down2)
cv2.imshow('original',img)
cv2.imshow('down1',down1)
cv2.imshow('down2',down2)
cv2.waitKey(0)
cv2.destroyAllWindows()

  • 总结

    • 每天进步一点点
  • 参考文献
    https://max.book118.com/html/2018/0523/168182943.shtm

CV之路——opencv基本操作相关推荐

  1. CV之路 —— Opencv学习

    初识Opencv 配置环境 视觉系统 开场白 常用操作1 结束语 配置环境 Ubuntu18.04下安装Miniconda,使用pip install opencv-python和opencv-con ...

  2. OpenCV修养(二)——OpenCV基本操作

    文章目录 2 OpenCV基本操作 2.1 IO操作 2.2 图像基本操作 2.2.1 图像绘制 2.2.1.1 绘制直线 2.2.1.2 绘制圆形 2.2.1.3 绘制矩形 2.2.1.4 添加文字 ...

  3. 【转】我的CV之路第一篇:ITK是啥?

    Itk篇 (Insight Segmentation and Registration Toolkit) ITK Itk篇 前言 一.ITK是什么? 二.一些函数 1.读/写图片 2.滤波器 前言 学 ...

  4. opencv基本操作二(读取视频流与保存视频、读取摄像头并保存视频)

    opencv基本操作二 要点 代码 例程一 例程二 要点 opencv常用读视频函数 cv2.VideoCapture .cv2.VideoCapture.get 等,可以参考这里 opencv常用写 ...

  5. 高一女孩成 AI 赛事奖项收割机,05 后新星如何踏上 CV 之路?

    今天分享的主角是我们的社区小成员李露菲,17 岁,目前是上海市南洋模范中学的一名高一学生,也是本次 MMPose 姿态估计创意 Demo 大赛 "最佳人气奖"第 一 名的获得者. ...

  6. opencv基本操作一(读取、处理、保存图片)

    opencv基本操作一 重要函数&概念 代码 例程一 例程二 重要函数&概念 cv2.resize()的用法见:https://blog.csdn.net/qq_41339539/ar ...

  7. 【自我提升】openCV基本操作

    写在前面:本篇博客主要是记录opnecv的基本操作,不记录安装等步骤.方便回顾和查找方法. 一.图像的IO操作,读取和保存方法 读取图像 在OpenCV中,读取图像的函数是imread().该函数可以 ...

  8. c++ opencv 基本操作

    下载地址: https://opencv.org/releases/ 归一化,转vector: Opencv C++ 归一化_jacke121的专栏-CSDN博客_c++ opencv 归一化 c++ ...

  9. 【CV】基于OpenCV的手掌检测和手指计数

    利用余弦定理使用OpenCV-Python实现手指计数与手掌检测. 手检测和手指计数 接下来让我们一起探索以下这个功能是如何实现的. OpenCV OpenCV(开源计算机视觉库)是一个开源计算机视觉 ...

最新文章

  1. pandas使用replace函数替换dataframe中的值:replace函数对dataframe中的多个值进行替换、即一次性同时对多个值进行替换操作
  2. Linux环境变量设置中配置文件分析(/etc/profile,~/.bashrc等)(转)
  3. pyspark rdd 数据持久化
  4. frameset ajax,js控制frameSet示例
  5. 面试精讲之面试考点及大厂真题 - 分布式专栏 03 阿里华为资深HR面试套路全揭晓
  6. Sql server2005中如何格式化时间日期
  7. tp5.0 php版本,ThinkPHP v5.0.2官方下载-ThinkPHP v5.0.2 完整版官方最新版-东坡下载
  8. python-元组,列表,字典常用方法
  9. mysql 5.5.29 winx64_【转载】MySQL 5.7.29详细下载安装配置教程winx64
  10. 如何选择条形码识别SDK
  11. 儿童使用计算机和手机的 危害,手机对孩子的4个不良影响,第3个最严重!
  12. python元组元素的提取_Python 元组
  13. JAVA编程入门学习
  14. 2021-09-29破解小米“铁蛋”,只需9999元,你也可以做一个四足机器人!
  15. 性能分析之响应时间拆分及 258 原则误区
  16. compareAndSet
  17. python--爬虫--积累--多图片网站抓取加速方案和调优记录
  18. 缓冲协议才是Python风靡全球的主要原因
  19. 也许有一天,你发觉日子特别的艰难,那可能是这次的收获将特别的巨大
  20. Substance Painter:常用快捷键

热门文章

  1. 并行计算及GPU简介
  2. C++虚成员函数表vtable
  3. 我の第一篇万字博文 | 带大家开开心心地进入Python世界
  4. 滚动视差?CSS 不在话下
  5. zsh 自动补全导致命令显示重复
  6. (NO.00005)iOS实现炸弹人游戏(十一):怪物之火精灵
  7. OpenStack监控测量服务Ceilometer安装及 API说明
  8. android安全问题(二) 程序锁
  9. 《剑指offer》c++版本 11. 旋转数组的最小数字
  10. java泛型数组替代方案_Kotlin泛型Array T导致“不能将T用作具体类型参数 . 使用类代替“但List T不会...