参考:

0、https://segmentfault.com/a/1190000003742481 #基础教程

1、http://docs.opencv.org/3.3.0/  官方文档api

2、http://docs.opencv.org/3.3.0/d6/d00/tutorial_py_root.html 官方英文教程

3、https://github.com/makelove/OpenCV-Python-Tutorial# 进阶教程

4、https://opencv-python-tutroals.readthedocs.io/en/latest/py_tutorials/py_tutorials.html

5、https://docs.opencv.org/3.3.0/index.html  官方英文教程

6、https://github.com/abidrahmank/OpenCV2-Python-Tutorials

7、https://www.learnopencv.com/

8、http://answers.opencv.org/questions/ OpenCV论坛

注:安装的版本 opencv_python-3.3.0-cp36-cp36m-win_amd64.whl

Python-OpenCV 处理图像(一):基本操作

0x00. 图片读、写和显示操作

1、使用cv2.cv的LoadImageShowImageSaveImage函数

import cv2.cv as cv# 读图片
image=cv.LoadImage('Lenna.png', cv.CV_LOAD_IMAGE_COLOR)#Load the image
#Or just: image=cv.LoadImage('img/image.png')

cv.NamedWindow('a_window', cv.CV_WINDOW_AUTOSIZE) #Facultative
cv.ShowImage('a_window', image) #Show the image

# 写图片
cv.SaveImage("thumb.png", thumb)
cv.WaitKey(0) #Wait for user input and quit

注:v3 版本 导入 import cv2.cv as cv 会报错 ; v2 版本可以正常运行

2、直接使用cv2的imreadimwriteimshow函数

import numpy as np
import cv2# imread函数还可以定义加载的mode,默认是以RGB模式处理图片:
# 0 表示会以灰度图加载
img = cv2.imread('Lenna.png',0)
cv2.imshow('image',img)
k = cv2.waitKey(0)
if k == 27:         # wait for ESC key to exit
    cv2.destroyAllWindows() # 退出
elif k == ord('s'): # wait for 's' key to save and exit
    cv2.imwrite('messigray.png',img) # 保存图像
    cv2.destroyAllWindows() # 退出

cv2.IMREAD_GRAYSCALE 转成灰度图像

import cv2
grayImage = cv2.imread('Lenna.png', cv2.IMREAD_GRAYSCALE)  # CV_LOAD_IMAGE_GRAYSCALE-->IMREAD_GRAYSCALE
# 可选参数CV_LOAD_IMAGE_COLOR (BGR), CV_LOAD_IMAGE_GRAYSCALE (grayscale), CV_LOAD_IMAGE_UNCHANGED(neither)
cv2.imwrite('MyPicGray.png', grayImage)

0x01. 获取图片属性

import cv2
img = cv2.imread('Lenna.png')
print (img.shape)
# (512, 512, 3)
print (img.size)
# 786432
print (img.dtype)
# uint8
# 在debug的时候,dtype很重要

0x02. 输出文本

在处理图片的时候,我们经常会需要把一些信息直接以文字的形式输出在图片上,下面的代码将实现这个效果:

注:v3版本 使用以下语句会出错

import cv2.cv as cvimage=cv.LoadImage('img/lena.jpg', cv.CV_LOAD_IMAGE_COLOR) #Load the image

font = cv.InitFont(cv.CV_FONT_HERSHEY_SIMPLEX, 1, 1, 0, 3, 8) #Creates a font

y = image.height / 2 # y position of the text
x = image.width / 4 # x position of the text

cv.PutText(image,"Hello World !", (x,y),font, cv.RGB(255, 255, 255)) #Draw the text

cv.ShowImage('Hello World', image) #Show the image

cv.WaitKey(0)

改成对应的v3 版本

# import cv2.cv as cv
import cv2# image=cv.LoadImage('lenna.jpg', cv.CV_LOAD_IMAGE_COLOR) #Load the image
image=cv2.imread('lenna.png',cv2.IMREAD_COLOR)# font = cv.InitFont(cv.CV_FONT_HERSHEY_SIMPLEX, 1, 1, 0, 3, 8) #Creates a font
font=cv2.FONT_HERSHEY_COMPLEX# y = image.height / 2 # y position of the text
y=image.shape[0]//2
# x = image.width / 4 # x position of the text
x=image.shape[1]//4

# cv.PutText(image,"Hello World !", (x,y),font, cv.RGB(255, 255, 255)) #Draw the text
cv2.putText(image, 'Hello World', (x,y), font, 0.5, (0,0,255),2)# cv.ShowImage('Hello World', image) #Show the image
cv2.imshow('Hello World',image)# cv.WaitKey(0)
cv2.waitKey(0)

0x03. 缩放图片

下面的例子将实现缩放图片并保存,这个在使用 OpenCV 做图像处理的时候都是很常用的操作:

import cv2.cv as cvim = cv.LoadImage("img/alkaline.jpg") #get the image

thumb = cv.CreateImage((im.width / 2, im.height / 2), 8, 3) #Create an image that is twice smaller than the original

cv.Resize(im, thumb) #resize the original image into thumb
#cv.PyrDown(im, thumb)

cv.SaveImage("thumb.png", thumb) # save the thumb image

注:v3 版本 导入import cv2.cv as cv 会报错 ; v2 版本可以正常运行

import cv2
import numpy as np
img = cv2.imread('lenna.png')
# 图像的宽度和高度都放大2倍,cv2.INTER_AREA为插值方式
res = cv2.resize(img,None,fx=2, fy=2, interpolation = cv2.INTER_AREA)
cv2.imshow('1',res)
#OR

height, width = img.shape[:2]
# 图像的宽度和高度都放大2倍,cv2.INTER_CUBIC为插值方式
res = cv2.resize(img,(2*width, 2*height), interpolation = cv2.INTER_CUBIC) #

cv2.imshow('2',res)cv2.waitKey(0)

0x04. 图像平移

import cv2
import numpy as npimg = cv2.imread('lenna.png',0) # 或 cv2.imread('lenna.png',cv2.IMREAD_GRAYSCALE)
rows,cols = img.shape # [h,w,c]

M = np.float32([[1,0,100],[0,1,50]]) # 2×3 transformation matrix.
dst = cv2.warpAffine(img,M,(cols,rows))cv2.imshow('img',dst)
cv2.waitKey(0)
cv2.destroyAllWindows()

0x05. 图像旋转

import cv2
import numpy as npimg = cv2.imread('lenna.png',0) # 或 cv2.imread('lenna.png',cv2.IMREAD_GRAYSCALE)
rows,cols = img.shape # [h,w,c]

M = cv2.getRotationMatrix2D((cols/2,rows/2),90,1) # 以图像中心为原点逆时针旋转90度,1表示保持原来的比例
dst = cv2.warpAffine(img,M,(cols,rows))cv2.imshow('img',dst)
cv2.waitKey(0)
cv2.destroyAllWindows()

0x06. 仿射变换

import cv2
import numpy as npimg = cv2.imread('lenna.png')
rows,cols,ch = img.shape # [h,w,c]

pts1 = np.float32([[50,50],[200,50],[50,200]])
pts2 = np.float32([[10,100],[200,50],[100,250]])M = cv2.getAffineTransform(pts1,pts2)dst = cv2.warpAffine(img,M,(cols,rows))cv2.imshow('image',dst)
cv2.waitKey(0)
cv2.destroyAllWindows()

0x07. 图像颜色变换

实际使用过程中,我们经常也需要对一些图片的颜色空间做一些改变之类的:

c2.cv:

import cv2.cv as cv
im=cv.LoadImage('img/fruits.jpg',cv.CV_LOAD_IMAGE_COLOR)
res = cv.CreateImage(cv.GetSize(im), cv.CV_8UC2, 3) #cv.CV_32F, cv.IPL_DEPTH_16S, ...
cv.Convert(im, res)
cv.ShowImage("Converted",res)
res2 = cv.CreateImage(cv.GetSize(im), cv.CV_8UC2, 3)
cv.CvtColor(im, res2, cv.CV_RGB2BGR) # HLS, HSV, YCrCb, ....
cv.ShowImage("CvtColor", res2)
cv.WaitKey(0)
  • cv.Convert():将图片从一个颜色空间转到另一个颜色空间

  • cv.CvtColor(src, dst, code):

cv2:

cv2.cvtColor(input_image, flag)函数实现图片颜色空间的转换,flag 参数决定变换类型。如 BGR->Gray flag 就可以设置为 cv2.COLOR_BGR2GRAY 。

一个简单的例子,下面的代码实现识别摄像视频中蓝色的部分:

import cv2
import numpy as npcap = cv2.VideoCapture(0)while(1):# 读取视频的每一帧
    _, frame = cap.read()# 将图片从 BGR 空间转换到 HSV 空间
    hsv = cv2.cvtColor(frame, cv2.COLOR_BGR2HSV)# 定义在HSV空间中蓝色的范围
    lower_blue = np.array([110,50,50])upper_blue = np.array([130,255,255])# 根据以上定义的蓝色的阈值得到蓝色的部分
    mask = cv2.inRange(hsv, lower_blue, upper_blue)res = cv2.bitwise_and(frame,frame, mask= mask)cv2.imshow('frame',frame)cv2.imshow('mask',mask)cv2.imshow('res',res)k = cv2.waitKey(5) & 0xFF
    if k == 27:break

cv2.destroyAllWindows()

以上的代码给出了视频中获取兴趣对象的基本思想。

0x08. 通道的拆分/合并处理

对于一张图片的 R、G、B 通道,我们可以很方便的使用 OpenCV 获取并分离或者合并:

(这是将图像灰度化处理的一种方式)

cv2.cv

import cv2.cv as cvorig = cv.LoadImage('img/fruits.jpg')
b = cv.CreateImage(cv.GetSize(orig), orig.depth, 1)
g = cv.CloneImage(b)
r = cv.CloneImage(b)
cv.Split(orig, b, g, r, None)merged = cv.CreateImage(cv.GetSize(orig), 8, 3)
cv.Merge(g, b, r, None, merged)cv.ShowImage("Image", orig)
cv.ShowImage("Blue", b)
cv.ShowImage("Green", g)
cv.ShowImage("Red", r)
cv.ShowImage("Merged", merged)cv.WaitKey(0)

cv2

import cv2img = cv2.imread('lenna.png')
b,g,r = cv2.split(img)
merged = cv2.merge((b,g,r))cv2.imshow("Image", img)
cv2.imshow("Blue", b)
cv2.imshow("Green", g)
cv2.imshow("Red", r)
cv2.imshow("Merged", merged)# cv2.waitKey(0)
k = cv2.waitKey(0) & 0xFF
if k == 27: # 按Esc 键
    cv2.destroyAllWindows()

0x09. 图片添加边距

cv2.copyMakeBorder函数

import cv2
import numpy as npBLUE = [255,0,0] # [B ,G ,R]img1 = cv2.imread('lenna.png')replicate = cv2.copyMakeBorder(img1,10,10,10,10,cv2.BORDER_REPLICATE)
reflect = cv2.copyMakeBorder(img1,10,10,10,10,cv2.BORDER_REFLECT)
reflect101 = cv2.copyMakeBorder(img1,10,10,10,10,cv2.BORDER_REFLECT_101)
wrap = cv2.copyMakeBorder(img1,10,10,10,10,cv2.BORDER_WRAP)
constant= cv2.copyMakeBorder(img1,10,10,10,10,cv2.BORDER_CONSTANT,value=BLUE)cv2.imshow("Image", img1)
cv2.imshow("replicate", replicate)
cv2.imshow("reflect", reflect)
cv2.imshow("reflect101", reflect101)
cv2.imshow("wrap", wrap)
cv2.imshow("constant", constant)# cv2.waitKey(0)
k = cv2.waitKey(0) & 0xFF
if k == 27: # 按Esc 键
    cv2.destroyAllWindows()

opencv-图像处理1 图像基本操作相关推荐

  1. OpenCv图像处理之图像视频摄像头读取和保存

    OpenCv图像处理之图像视频摄像头读取与保存 使用cv::imread()读取图片 使用cv::imwrite()存储图片 使用cv::VideoCapture::open()读取视频 使用cv:: ...

  2. OpenCV图像处理(十一)---图像梯度

    安培定则:也叫右手螺旋定则,是表示电流和电流激发磁场的磁感线方向间关系的定则.通电直导线中的安培定则(安培定则一):用右手握住通电直导线,让大拇指指向电流的方向,那么四指指向就是磁感线的环绕方向:通电 ...

  3. OpenCv图像处理之图像归一化

    OpenCv图像处理之图像归一化 归一化 中心化 标准化 归一化 图像处理中,图像单通道像素值为0~255之间的uchar类型,通常使用min-max归一化将其转化为0~1区间之间,既不会改变数据的分 ...

  4. 《OpenCv视觉之眼》Python图像处理二十一:Opencv图像处理之图像线性变换和非线性变换的方法及原理

    本专栏主要介绍如果通过OpenCv-Python进行图像处理,通过原理理解OpenCv-Python的函数处理原型,在具体情况中,针对不同的图像进行不同等级的.不同方法的处理,以达到对图像进行去噪.锐 ...

  5. OpenCV中的图像基本操作--B站视频教程笔记(四)

    在学习B站教学视频的时候记录的笔记 OpenCV+TensorFlow]迪哥带你做项目!深度学习+计算机视觉实战 纯实战教学 技能点加满 3.1 形态学 首先创建一张带毛边的图片如图: 读取图片代码如 ...

  6. OpenCV—Python PyLibTiff_psd 图像基本操作以及图像格式转换

    文章目录 一.图片 读.写.显示.属性查看 libtiff 包装器 Python 模块 opencv 模块 PIL 模块 直接修改图片格式 大(分辨率大)图片缩小 与上面代码同效 二.PSD图像读取与 ...

  7. Python OpenCV 图像处理之 图像运算和图像位运算知识补充

    Python OpenCV 365 天学习计划,与橡皮擦一起进入图像领域吧.本篇博客是这个系列的第 51 篇. 该系列文章导航参考:https://blog.csdn.net/hihell/categ ...

  8. OpenCV图像处理--将图像裁剪为圆形

    1,需求 为了便于项目前端展示用户头像,需要将头像处理为圆形,非圆形区域设置为透明.其实,前端可以在显示的时候处理,但是前端采用WebGL,暂时搞不定,所以由后端进行图像的一次性加工. 于是,我们尝试 ...

  9. Opencv图像处理(图像的线性灰度变换)

    图像增强简介 分段线性法变换原理 代码实现和效果预览 疫情期间,楼主作为大三学生每天除了要应付网课和作业之外还得抽出时间准备研究生考试.虽说少了很多时间学习自己喜欢的知识,但近期由于课程作业关系需要在 ...

  10. OpenCV图像处理——判断图像是否失焦模糊

    前言 在图像处理中,避免不了会碰到一些失焦模糊的图像,特别在读取和初始化摄像头的时候,对失焦模糊判断是避免不了的一步,那么如何使用opencv去判断一张图像是否模糊呢? 判断是否失焦 失焦的图片和对焦 ...

最新文章

  1. Python Django 一对一多表查询关联表字段
  2. PAI和Hologres的个性化推荐最佳实践
  3. HDU5196--DZY Loves Inversions 树状数组 逆序数
  4. Kafka : WARN Error while fetching metadata with correlation id xx : {=UNKNOWN_TOPIC_OR_PARTITION}
  5. ASP.NET 页面双向静态化
  6. Grafana实现参数查询功能
  7. python海龟画五角星随机_Python turtle 绘制五角星
  8. js校验 身份证号18位
  9. 2013年12月北京市广播电台网络影响力排名
  10. 计算机上怎么计算x的n次方,计算x的n次方(用函数)
  11. 筱筱看博客(微信小程序、Lin-ui组件、vant Weapp)
  12. Matlab 二维网格图pcolor和imagesc区别
  13. 微信扫码支付:此公众号并没有这些scope的权限,错误码:10005
  14. 安装pycrypto,windows10,全解
  15. 请编写一个主程序文件 main1.c 和一个子程序文件 sub1.c, 要求:子程序sub1.c 包含一个算术运算函数 float x2x(int a,int b),此函数功能为对两个输入整型参数做某
  16. 2022-02-18 Android app 二维码扫描demo,用zxing库,实测ok,记录一下所参考有价值的文章,有生成二维码的demo,但没有亲测。
  17. python的歌曲评论数据分析_用Python分析44万条数据,揭秘如何成为网易云音乐评论区的网红段子手...
  18. 小米红米Note4X(高配版)线刷兼救砖_解账户锁_纯净刷机包_教程
  19. SPC 统计过程控制
  20. JAVA GUI中的窗体清空和窗体关闭方法分析

热门文章

  1. 什么是 P = NP 问题?
  2. yum是干什么的_linux下的yum命令详解
  3. 我的世界超能物质纳米机器人_超能物质复制物品教程(附图) - [MO]超能物质 (Matter Overdrive) - MC百科|最大的Minecraft中文MOD百科...
  4. [ZJOI2009]狼和羊的故事 题解
  5. 【译】如何学习机器学习
  6. java获取京东token_京东宙斯平台使用方法(accesstoken,appkey,appsecret参数和SDK的获取)...
  7. kali Linux 2021 新版安装
  8. Android剥洋葱式解析JSON数据
  9. 【C++】(九)作用域、生命期、头文件和工程文件
  10. 市场营销工作重中之重——提升工作效率