Opencv笔记(一):图像的基本操作

Opencv笔记(一):图像的基本操作

  1.图像的读、显示和保存操作

import cv2
img = cv2.imread('filename',0);
cv2.imshow('name',img);
k=cv2.waitKey(0);
if k==27:
    cv2.destroyAllWindows();
elif k==ord('s'):
    cv2.imwrite('filename',img);
    cv2.destroyAllWindows();
  • cv2.imread(‘a’,b)是图片读入函数,参数a是图片的存放路径,b是读取的方式,若b=0,则读取到一张灰度图,若为1则读取到一张彩色图。特别注意的是图片的存放路径要完整,不然会出现下面的错误。
cv2.error: /build/opencv-SviWsf/opencv-2.4.9.1+dfsg/modules/highgui/src/window.cpp:269: error: (-215) size.width>0 && size.height>0 in function imshow
  • cv2.imshow(‘a’,b)是一个图片显示函数。参数a是自个定义的窗口名字,b是读取的图像。这个函数建立的窗口会自动随图片的大小而调整大小。
  • cv2.waitKey(a) 是一个键盘绑定函数。需要指出的是它的时间尺度是毫秒级。函数等待特定的几毫秒,看是否有键盘输入。特定的几毫秒之内,如果按下任意键,这个函数会返回按键的 ASCII 码值,程序将会继续运行。一般a写为0,这样会无限等待键盘的输入,没有返回值。如果a<0,则无限等待且返回值为按键值。如果a>0,那么超过指定时间返回-1。
  • cv2.destroyAllWindows()是一个可以轻易删除任何我们建立的窗口。如果你想删除特定的窗口可以使用 cv2.destroyWindow(),在括号内输入你想删除的窗口名。
  • ord(‘a’)是一个将字符转为对应的ASCII码。
  • cv2.imwrite(‘a’,b)是一个图片保存函数,a是你自个取的文件名及其存放路径,b是保存的对象。

      2.获取图像的属性

import cv2
img = cv2.imread('filename',1)
print img.size
#1557504
print img.shape
#(832, 624, 3)
print img.dtype
#uint8
  • img.size()函数返回图像的像素数目
  • img.shape()函数可以获取图像的形状。他的返回值是一个包含行数,列数,通道数的元组。
  • img.dtype()函数返回图像的数据类型。注意:在除虫(debug)时 img.dtype 非常重要。因为在 OpenCV-
    Python 代码中经常出现数据类型的不一致。

      3.图像的缩放

img=cv2.imread('wyg.jpg')
res=cv2.resize(img,None,fx=2,fy=2,interpolation=cv2.INTER_CUBIC)
#将图片扩展成原来的2倍
#or
height,width=img.shape[:2]
res=cv2.resize(img,(2*width,2*height),interpolation=cv2.INTER_CUBIC)
  • cv2.resize(src, dst, interpolation=CV_INTER_LINEAR)函数有三个参数,第一个参数src为要缩放的对象,第二个参数dst可以是缩放因子fx,fy,也可以直接写生成图像的大小。第三个参数是指选择的插值方法,缩放是使用cv2.INTER_AREA,扩展时使用cv2.INTER_CUBIC。

 4.图像的平移

        若知道图片的移动方向(x,y),移动的距离为(tx,ty),则可以创建矩阵:M = [ [1 0 tx] [0 1 ty] ],存为np.float32类型放入numpy的数组中。

import cv2
import numpy as np

img = cv2.imread('wyg.jpg',0)
rows,cols = img.shape
M = np.float32([[1,0,100],[0,1,50]])
dst = cv2.warpAffine(img,M,(col,rows))

cv2.imshow('opencv',dst)
cv2.waitKey(0)
cv2.destoryAllwindows()
  • cv2.warpAffine(a,b,c)平移函数有三个参数,a是平移的对象,b是平移矩阵,即M,c是输出图片的尺寸,它的格式
    应该是图像的(宽,高)。应该记住的是图像的宽对应的是列数,高对应的是行数。

    5.图像的旋转

import cv2
import numpy as np
img=cv2.imread('wyg.jpg',0)
rows,cols=img.shape
# 这里的第一个参数为旋转中心,第二个为旋转角度,第三个为旋转后的缩放因子
# 可以通过设置旋转中心,缩放因子,以及窗口大小来防止旋转后超出边界的问题
M=cv2.getRotationMatrix2D((cols/2,rows/2),45,0.6)
# 第三个参数是输出图像的尺寸中心
dst=cv2.warpAffine(img,M,(2*cols,2*rows))
cv2.imshow('img',dst)
cv2.destroyAllWindows()

Opencv笔记(一):图像的基本操作

Opencv笔记(一):图像的基本操作

      6.图像的仿射变换

        在仿射变换中,原图中所有的平行线在结果图像中同样平行。为了创建这个矩阵我们需要从原图像中找到三个点以及他们在输出图像中的位置。然后cv2.getAffineTransform 会创建一个 2×3 的矩阵,最后这个矩阵会被传给函数 cv2.warpAffine。

import cv2
import numpy as np

img=cv2.imread('wyg.jpg')
rows,cols,ch=img.shape
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('opencv',dst)
cv2.waitKey(0)
cv2.destroyAllWindows()

Opencv笔记(一):图像的基本操作

转载于:https://www.cnblogs.com/longwhite/p/10397782.html

版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请联系我们举报,一经查实,本站将立刻删除。

发布者:全栈程序员-站长,转载请注明出处:https://javaforall.net/101561.html原文链接:https://javaforall.net

(0)
全栈程序员-站长的头像全栈程序员-站长


相关推荐

  • c language program_language deficit

    c language program_language deficitprintf(“%d\n”,a) scanf(“%d%d”,&num1,&num2),&代表存放的是地址,scanf相当于scannerin 在同一个工程项目中,全局变量可通用,如果要A类要用的B类的全局变量num,则这样声明,externintnum,然后就可以使用了………………………………………………………………………………………….

    2022年9月28日
    0
  • Python实现AI视频识别——手势控制[通俗易懂]

    Python实现AI视频识别——手势控制[通俗易懂]用opencv识别手势实现原理代码importcv2importmediapipeasmpclasshandDetector():#经典OOP#设置初始条件def__init__(self,mode=False,maxHands=2,detectionCon=0.5,trackCon=0.5):self.mode=modeself.maxHands=maxHands#最多同时出现几只手

    2022年5月9日
    43
  • 安装scala和配置环境变量

    安装scala和配置环境变量安装scala和配置环境变量

    2022年4月23日
    43
  • 软件测试笔试面试题目完全汇总

    软件测试笔试面试题目完全汇总1、软件测试的流程2、web测试和APP测试的区别仅仅从功能测试的层面上来讲的话,在流程和功能测试上是没有区别的。那么区别在哪里呢?由于载体不一样,所以系统测试和一些细节可能会不一样。那么我们就要先来了解,web和app的区别。web项目,一般都是b/s架构,基于浏览器的,而app则是c/s的,必须要有客户端。那么在系统测试测试的时候就会产生区别了。首先从系统架构来看的话,web测试…

    2022年5月8日
    38
  • java开发工具包_java多线程实例

    java开发工具包_java多线程实例【发包工具】http多线程发包工具使用方法:输入地址,发送的内容,线程数,等待时间,每个线程发送的次数,GET/POST请求。源代码packagecom.xmxkkk.httptest;importjava.awt.*;importjava.awt.event.*;importjavax.swing.*;importjavax.swing.border.TitledBorder;publ…

    2022年9月6日
    2
  • mytabiscodehelp在线激活激活码[最新免费获取]「建议收藏」

    (mytabiscodehelp在线激活激活码)本文适用于JetBrains家族所有ide,包括IntelliJidea,phpstorm,webstorm,pycharm,datagrip等。IntelliJ2021最新激活注册码,破解教程可免费永久激活,亲测有效,下面是详细链接哦~https://javaforall.net/100143.html…

    2022年3月27日
    36

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注

关注全栈程序员社区公众号