zoukankan      html  css  js  c++  java
  • OpenCV for Python 学习笔记 一

    本人的学习笔记主要记录的是学习opencv-python-tutorials这本书中的笔记

    今天晚上简单学习OpenCV for Python如何绘图,主要用了这几个函数(这几个函数可在:http://docs.opencv.org/modules/core/doc/drawing_functions.html 找到):

    cv2.line(img, pt1, pt2, color[, thickness[, lineType[, shift]]]) 
    cv2.circle(img, center, radius, color[, thickness[, lineType[, shift]]]) 
    cv2.circle(img, center, radius, color[, thickness[, lineType[, shift]]]) 
    cv2.ellipse(img, center, axes, angle, startAngle, endAngle, color[, thickness[, lineType[, shift]]]) 
    cv2.polylines(img, pts, isClosed, color[, thickness[, lineType[, shift]]]) 

    一开始自己照抄书上代码,代码如下:

    import numpy as np
    import cv2
    
    img = np.zeros((512,512,3), np.uint8)
    img = cv2.line(img, (1,1),(510,510), (255,0,0),5)
    img = cv2.rectangle(img, (200,100), (100,200), (0,255,0), 3)
    img = cv2.circle(img, (100,100), 63, (0,0,255), -1)
    img = cv2.ellipse(img, (256,256), (100,50), 0, 0, 180, 255, -1)
    cv2.imshow('hello', img)
    cv2.waitKey(0)
    cv2.destroyAllWindows()

    总是在运行到cv2.imshow()这出错,错误代码:

    error: (-215) size.width>0 && size.height>0 in function imshow

    大致意思是要求img的尺寸必须是大于0的,可是书上是这么写的啊?

    回想在C里面用OpenCV绘图时,直接调用绘图函数即可,貌似不需要加返回值,于是自己尝试着去掉返回值,每次都是直接在img上绘图,没有返回值

    cv2.line(img, (1,1),(510,510), (255,0,0),5)
    cv2.rectangle(img, (200,100), (100,200), (0,255,0), 3)
    cv2.circle(img, (100,100), 63, (0,0,255), -1)
    cv2.ellipse(img, (256,256), (100,50), 0, 0, 180, 255, -1)

    果然就可以了

    自己想了想,如果将返回值赋值img,那么img表示的应该是绘图是否成功的标志,而不是img本身了

    上网搜了搜,在:http://docs.opencv.org/modules/core/doc/drawing_functions.html 找到了官网的注释,说这些函数的返回值都是None(难怪不能imshow)

    这个问题解决了,开始绘制多边形

    加了下面的代码:

    pts = np.array([[10,5], [34,23],[231,54], [76,98]], np.uint8)
    pts = pts.reshape((-1,1,2))
    cv2.polylines(img, [pts], True, (0,255,255))

    又出错。。

    error: (-215) p.checkVector(2, CV_32S) >= 0 in function polylines

    google之,http://stackoverflow.com/questions/11270250/what-does-the-python-interface-to-opencv2-fillpoly-want-as-input 解决方法如下:

    将最后一行改成如下形式:

    cv2.polylines(img, np.array([pts], np.int32), True, (0,255,255))

    将[pts]转换成32int的numpy.array类型,就好了

    至于此处的问题,大家自己理解吧,我这说不清楚

    今天第一天,并没有多少硬货。加油!

  • 相关阅读:
    什么是web框架
    编写CGI程序步骤
    web开发 c/s结构 和 b/s结构
    python自带的web服务器
    自制计算器
    条件判断
    模版继承
    参数传递
    异常处理
    【uoj#244】[UER #7]短路 CDQ分治+斜率优化dp
  • 原文地址:https://www.cnblogs.com/pakfahome/p/3911292.html
Copyright © 2011-2022 走看看