前提・実現したいこと
認識させる画像を読み込ませ、特徴点を解析して、特徴点を書き込んだ画像を保存させたい
発生している問題・エラーメッセージ
Traceback (most recent call last): File "C:\Users\seki-sugitalab\source\repos\library02\library02\Detect.py", line 47, in <module> main() File "C:\Users\seki-sugitalab\source\repos\library02\library02\Detect.py", line 42, in main cut = cv.drawKeypoints(cut, Keypoints, None) AttributeError: module 'cv2.cv2' has no attribute 'drawKeypoints'
該当のソースコード
import cv2 as cv import numpy as np def main(): # ファイルを読み込み image_file = "C:/Users/seki-sugitalab/Pictures/target.png" src = cv.imread(image_file, cv.IMREAD_COLOR) # 画像の大きさ取得 height, width, channels = src.shape image_size = height * width # グレースケール化 img_gray = cv.cvtColor(src, cv.COLOR_RGB2GRAY) # しきい値指定によるフィルタリング retval, dst = cv.threshold(img_gray, 127, 255, cv.THRESH_TOZERO_INV ) # 白黒の反転 dst = cv.bitwise_not(dst) # 再度フィルタリング retval, dst = cv.threshold(dst, 0, 255, cv.THRESH_BINARY | cv.THRESH_OTSU) # 輪郭を抽出 *dst, contours, hierarchy = cv.findContours(dst, cv.RETR_TREE, cv.CHAIN_APPROX_SIMPLE) for i, contour in enumerate(contours): # 小さな領域の場合は間引く area = cv.contourArea(contour) if area < 500: continue # 画像全体を占める領域は除外する if image_size * 0.99 < area: continue # 外接矩形を取得 x,y,w,h = cv.boundingRect(contour) # 外接矩形で囲まれた箇所のイメージを切り出し cut = dst[y:y+h][x:x+w] # 特徴量検出機を作成し解析 detector = cv.FastFeatureDetector_create() detector.setNonmaxSuppression(False) Keypoints = detector.detect(cut) # 画像への特徴点の書き込み cut = cv.drawKeypoints(cut,Keypoints, None) cv.imwrite('test_%d.png' % i, cut) if __name__ == '__main__': main()
試したこと
ネットからの情報を頼りにいろいろと調べ試行錯誤してみましたが、解決に至りませんでした。
補足情報(FW/ツールのバージョンなど)
Windows10
Python 3.6(64-bit)
Microsoft Visual Studio2017
opencv-python(4.0.0.21)
回答1件
あなたの回答
tips
プレビュー
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。
2019/01/21 08:29 編集
2019/01/21 08:47