Python OpenCV のメソッドの仕様の調べ方 (実演編!)
以下の記事の実演編です。
keep-loving-python.hatenablog.com
実演
以下のようなコードを動かしてみます。 画像にマーカを書くコードです。
図形にマーカを書くコードとして、参考にしたのは、コード内のメモのとおり、
# https://note.nkmk.me/python-opencv-warp-affine-perspective/ wo mita
です。
# https://note.nkmk.me/python-opencv-warp-affine-perspective/ wo mita import cv2 import numpy as np import math import inspect ## img = cv2.imread('lena.jpg') src_pts = np.array([[30, 30], [50, 200], [350, 50]], dtype=np.float32)##int32)##float32) img_mark = img.copy() print(cv2.__version__) print(inspect.getdoc(cv2.drawMarker))## for pt in src_pts: cv2.drawMarker(img_mark, tuple(pt), (0, 255, 0), thickness=4) cv2.imwrite('out_yoon.jpg', img_mark)
さて、このコードは、ver4.0.1では、問題なく動作します。しかし、ver4.5.3では、エラーで失敗します。
さあ、皆の衆、お立ちあい
このコードは、APIの仕様が表示されます!!!
エラーが怖くありません。
4.0.1のとき
4.0.1 drawMarker(img, position, color[, markerType[, markerSize[, thickness[, line_type]]]]) -> img . @brief Draws a marker on a predefined position in an image. . . The function cv::drawMarker draws a marker on a given position in the image. For the moment several . marker types are supported, see #MarkerTypes for more information. . . @param img Image. . @param position The point where the crosshair is positioned. . @param color Line color. . @param markerType The specific type of marker you want to use, see #MarkerTypes . @param thickness Line thickness. . @param line_type Type of the line, See #LineTypes . @param markerSize The length of the marker axis [default = 20 pixels]
さて、4.5.3で、どうかわっているか!!!
4.5.3 drawMarker(img, position, color[, markerType[, markerSize[, thickness[, line_type]]]]) -> img . @brief Draws a marker on a predefined position in an image. . . The function cv::drawMarker draws a marker on a given position in the image. For the moment several . marker types are supported, see #MarkerTypes for more information. . . @param img Image. . @param position The point where the crosshair is positioned. . @param color Line color. . @param markerType The specific type of marker you want to use, see #MarkerTypes . @param thickness Line thickness. . @param line_type Type of the line, See #LineTypes . @param markerSize The length of the marker axis [default = 20 pixels]
がーーーーん 表示の範囲では同じでした。
エラーの内容
Traceback (most recent call last): File "opencv_api_ex001.py", line 21, in <module> cv2.drawMarker(img_mark, tuple(pt), (0, 255, 0), thickness=4) cv2.error: OpenCV(4.5.3) :-1: error: (-5:Bad argument) in function 'drawMarker' > Overload resolution failed: > - Can't parse 'position'. Sequence item with index 0 has a wrong type > - Can't parse 'position'. Sequence item with index 0 has a wrong type
オチ
この表示されるAPI仕様より細かいレベルでの変更のようです。
下記にて、float32--> int32 で解決します。
src_pts = np.array([[30, 30], [50, 200], [350, 50]], dtype=np.float32)##int32)##float32)
コメント
(今回は、敗れましたが。。。。!!)
さて、旅にでるか。。。