前提・実現したいこと
pythonを用いてOpenCVで物体認識をしたい
発生している問題・エラーメッセージ
物体(キャベツ)を認識したらそれを赤い四角で囲むはずが出力ファイルに何も描かれない
該当のソースコード
Python
1#-*- coding:utf-8 -*- 2import os 3import cv2 4import numpy as np 5 6# カスケード型識別器の読み込み 7cascade = cv2.CascadeClassifier("cascade.xml") 8 9# 入力画像を読み込み 10img = cv2.imread("3.jpg") 11 12# グレースケール変換 13gray = cv2.cvtColor(img, cv2.COLOR_BGR2GRAY) 14 15# 物体領域の探索 16obj = cascade.detectMultiScale(gray, scaleFactor=1.1, minNeighbors=3, minSize=(30, 30)) 17 18# 物体の領域を赤色の矩形で囲む 19for (x, y, w, h) in obj: 20 cv2.rectangle(img, (x, y), (x + w, y+h), (0, 0, 200), thickness=3) 21 22# 結果の出力 23cv2.imwrite("output1.jpg", img)
3.jpgはキャベツが3つほど写っている画像です。
プログラムの参考元はこちら
試したこと
img,gray,objの出力を確かめました。
print(imgとすると)
[[[255 255 255] [255 255 255] [255 255 255] ... [247 245 245] [247 245 245] [247 245 245]] [[255 255 255] [255 255 255] [255 255 255] ... [247 245 245] [247 245 245] [247 245 245]] [[255 255 255] [255 255 255] [255 255 255] ... [247 245 245] [247 245 245] [247 245 245]] ... [[243 244 242] [243 244 242] [243 244 242] ... [230 231 227] [232 233 229] [232 233 229]] [[243 244 242] [243 244 242] [243 244 242] ... [230 231 227] [232 233 229] [232 233 229]] [[243 244 242] [243 244 242] [243 244 242] ... [230 231 227] [232 233 229] [232 233 229]]]
print(gray)とすると、
[[255 255 255 ... 245 245 245] [255 255 255 ... 245 245 245] [255 255 255 ... 245 245 245] ... [243 243 243 ... 230 232 232] [243 243 243 ... 230 232 232] [243 243 243 ... 230 232 232]]
print(obj)とすると
()
cascade.xmlの中身は、それっぽい数字が並んでいて学習が失敗したわけではなさそうでした。
補足情報(FW/ツールのバージョンなど)
macOS Catalina 10.15.2
python 3.7.6
OpenCV 3.4.9(print(cv2.version)を実行)
OpenCVが4.xでない理由は、ネット上のプログラムを参考にする上で4.xでは動かない物がいくつかあったので(opencv_traincascadeなど)改めて3.xをインストールしてそちらにPATHを通したからです。
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。
2020/05/01 11:22 編集
2020/05/01 11:26
2020/05/01 12:00
2020/05/01 13:28
2020/05/01 15:14
2020/05/01 16:07