質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

新規登録して質問してみよう
ただいま回答率
85.37%
Node-RED

Node-REDは、ビジュアルプログラミング向けのフローベース開発ツールです。ブラウザベースのUIになっており、さまざまなノード(Node)を結びつけることでフローを作成でき、処理を実現します。

OpenCV

OpenCV(オープンソースコンピュータービジョン)は、1999年にインテルが開発・公開したオープンソースのコンピュータビジョン向けのクロスプラットフォームライブラリです。

Python

Pythonは、コードの読みやすさが特徴的なプログラミング言語の1つです。 強い型付け、動的型付けに対応しており、後方互換性がないバージョン2系とバージョン3系が使用されています。 商用製品の開発にも無料で使用でき、OSだけでなく仮想環境にも対応。Unicodeによる文字列操作をサポートしているため、日本語処理も標準で可能です。

Q&A

解決済

1回答

2101閲覧

node-REDとpython-opencvの連携

zy70

総合スコア4

Node-RED

Node-REDは、ビジュアルプログラミング向けのフローベース開発ツールです。ブラウザベースのUIになっており、さまざまなノード(Node)を結びつけることでフローを作成でき、処理を実現します。

OpenCV

OpenCV(オープンソースコンピュータービジョン)は、1999年にインテルが開発・公開したオープンソースのコンピュータビジョン向けのクロスプラットフォームライブラリです。

Python

Pythonは、コードの読みやすさが特徴的なプログラミング言語の1つです。 強い型付け、動的型付けに対応しており、後方互換性がないバージョン2系とバージョン3系が使用されています。 商用製品の開発にも無料で使用でき、OSだけでなく仮想環境にも対応。Unicodeによる文字列操作をサポートしているため、日本語処理も標準で可能です。

0グッド

0クリップ

投稿2022/10/01 01:31

初学者です。
対応の仕方に苦慮しており、ご教示いただきたいです。
お力添えのほどよろしくお願いいたします。

前提

node-REDで複数の画像を順番に判定するシステムを構築したいと考えております。

実現したいこと

node-REDからpython-opencvのファイルを開き、
画像判定をした結果をnode-REDに返すことです。

発生している問題・エラーメッセージ

node-REDに返す際に以下のエラーが出ます。

エラーメッセージ
exit code: 1, [ WARN:0@0.329] global D:\a\opencv-python\opencv-python\opencv\modules\imgcodecs\src\loadsave.cpp (239) cv::findDecoder imread_('test3.jpg'): can't open/read file: check file path/integrity
Traceback (most recent call last):
File "C:\python-test\template-test\print-test.py", line 8, in <module>
img2 = img.copy()
AttributeError: 'NoneType' object has no attribute 'copy'

該当のソースコード

import cv2
import numpy as np
from matplotlib import pyplot as plt
img = cv2.imread('test3.jpg',0)

img2 = img.copy()      ←この時点でエラーが出ます
template = cv2.imread('template.png',0)   
w, h = template.shape[::-1]

試したこと

・pythonのファイル自体は、単体であれば問題なく動く旨を確認済みです。
・nodeREDでのpythonファイルの読み込みにはpythonshellノードを使用しています。
・pythonshellノードが問題なく動く旨は検証済みです。
(上記のファイルとは別に、print("test")などの単純なファイルを作成して確認)

以上です。

気になる質問をクリップする

クリップした質問は、後からいつでもMYページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

guest

回答1

0

ベストアンサー

「mread_('test3.jpg'): can't open/read file」とありますので、test3.jpgファイルがみつからないのでしょう。
この指定だと、相対パスですから、実行したプログラムのカレントパスにあることを想定しています。
node-REDがどのようにpythonスクリプトを実行しているのか知りませんが、これが問題だと思います。

まずは、test3.jpg の指定を絶対パスにしてみてはどうでしょう。

また、相対パスにしたければ、node-REDで実行したときのカレントパスを調べてみる必要があります。
調べかたは検索すると出てくるでしょう。

投稿2022/10/01 03:16

TakaiY

総合スコア13687

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

zy70

2022/10/01 06:52

TakaiY様 早々のごアドバイスありがとうございました。 教えていただいた通り、絶対パスにすることで動くようになりました。 (検証に時間がかかり、お返事が遅れ申し訳ございません) 絶対パスと伺って、てっきり以下のように書き換えればよいのかと思い込んでいて、正解にたどり着くまで時間がかかりましたが、冷静に見直して解決しました。 ここだけで3日以上悩んでいたので感動しました! また機会ございましたら、よろしくお願いいたします。 誤) img = cv2.imread('C:\python-test\template-test\test3.jpg',0) img2 = img.copy() 正) img = cv2.imread('/python-test/template-test/test3.jpg',0) img2 = img.copy() ※(私ほど無知な方はいないかもしれませんが)、似たように迷った方の参考になればと思い記載します。
TakaiY

2022/10/01 09:32

パスを表わしているのは文字列なので、pythonの文字列の扱いについてのきまりに従う必要があります。 pythonの文字列では、「\」(円マーク もしくはバックスラッシュ)は、特殊な文字を表すためのエスケープ文字になっています。なので、文字列の中に「\」を含めたければ、 - 「\\」と2つならべる。 (1つめがエスケープ文字で2つめが\を表わす) - raw文字列(文字列の前にrを付ける) -> r'C:\python-test\template-test\test3.jpg' の何れかで対応できます。 また、windowsであってもパスの区切りを「/」(スラッシュ)で表すことができるので、上記のような方法でも対応できます。 このあたりは、pythonでパスを扱うのに必要な知識ですので、しっかり確認しておくといいでしょう。
zy70

2022/10/01 18:17

TakaiY様 詳しくご教示いただきありがとうございます。 しっかり覚えて、いつか私も困った誰かに教えられるレベルになるように努力いたします。
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
85.37%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問