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

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

新規登録して質問してみよう
ただいま回答率
85.50%
C

C言語は、1972年にAT&Tベル研究所の、デニス・リッチーが主体となって作成したプログラミング言語です。 B言語の後継言語として開発されたことからC言語と命名。そのため、表記法などはB言語やALGOLに近いとされています。 Cの拡張版であるC++言語とともに、現在世界中でもっとも普及されているプログラミング言語です。

OpenCV

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

Python

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

Q&A

2回答

3635閲覧

opencvを用いた画像認識のプログラム

Suginori1996

総合スコア24

C

C言語は、1972年にAT&Tベル研究所の、デニス・リッチーが主体となって作成したプログラミング言語です。 B言語の後継言語として開発されたことからC言語と命名。そのため、表記法などはB言語やALGOLに近いとされています。 Cの拡張版であるC++言語とともに、現在世界中でもっとも普及されているプログラミング言語です。

OpenCV

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

Python

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

0グッド

1クリップ

投稿2016/01/15 04:25

###pythonからc++への書き換えについて
学校でopenCVを用い多研究をしています.
カメラで撮った写真の緑色の部分の面積を出すプログラムを作っています.
去年の人がpythonで書いたものをc++に書き換えたいのですが,pythonが全く分からずエラーが多く出ます.少しずつ変更していきたいのでご協力お願いします.

###pythonプログラム
import cv2
import numpy as np
from numpy import*

g_min = np.array([30,70,30])
g_max = np.array([70,255,255])

膨張化用のカーネル

k = np.ones((5,5),np.uint8)

##----------------------

カラートラッキング

##----------------------
def color_track(im,h_min,h_max):

im_h = cv2.cvtColor(im, cv2.COLOR_BGR2HSV)# RGB色空間からHSV色空間に変換 im_m = cv2.inRange(im_h,h_min,h_max) # マスク画像の生成 im_m = cv2.medianBlur(im_m,7) # 平滑化 im_m = cv2.dilate(im_m,k,iterations=1) # 膨張化 im_c = cv2.bitwise_and(im,im,mask=im_m) # 色領域抽出 return im_m,im_c

##----------------------

Main

##----------------------
def main():
# カメラ指定
cap = cv2.VideoCapture(0)
im = cap.read()[1]
# 計算高速化のために画像サイズを1/2
im = cv2.resize(im,(im.shape[1]/2,im.shape[0]/2))
im_m,im_c = color_track(im,g_min,g_max)
M0 = np.count_nonzero(im_m)
D0=50
while True:
# 入力画像の取得
im = cap.read()[1]
# 計算高速化のために画像サイズを1/2
im = cv2.resize(im,(im.shape[1]/2,im.shape[0]/2))
im_m,im_c = color_track(im,g_min,g_max)
# 白色領域の画素数を計算
M = np.count_nonzero(im_m)
D = format( (sqrt(M0)/sqrt(M))*D0,".2f")
# マスク画像から指定した色の領域を抽出
cv2.putText(im_m,"Moment:"+str(M),(30,30),1,1.5,(150,70,50),2) #数値要検証
cv2.putText(im_m,"Distance:"+str(D),(30,70),1,1.5,(150,70,50),2)
# 結果表示
cv2.imshow("Camera",im)
cv2.imshow("Mask",im_m)
cv2.imshow("Color Tracking",im_c)
# キーが押されたらループから抜ける
if cv2.waitKey(10) > 0:
cap.release()
cv2.destroyAllWindows()
break

if name == 'main':
main()

###書き換えているプログラム
#include <opencv2/core/core.hpp>
#include <opencv2/highgui/highgui.hpp>
#include <opencv2/imgproc/imgproc.hpp>
from numpy import*;

using namespace cv;

g_min = np.array([30, 70, 30])
g_max = np.array([70, 255, 255])
// 膨張化用のカーネル
k = np.ones((5, 5), np.uint8)

// カラートラッキング
double color_track(im, h_min, h_max) :

im_h = cv2.cvtColor(im, cv2.COLOR_BGR2HSV; // RGB色空間からHSV色空間に変換
im_m = cv2.inRange(im_h, h_min, h_max); // マスク画像の生成
im_m = cv2.medianBlur(im_m, 7); // 平滑化
im_m = cv2.dilate(im_m, k, iterations = 1; // 膨張化
im_c = cv2.bitwise_and(im, im, mask = im_m); // 色領域抽出

return im_m, im_c;

// Main
int main(void)
{
// カメラ指定
cap = cv2:VideoCapture(0);
im = cap.read()[1];
// 計算高速化のために画像サイズを1 / 2
im = cv2.resize(im, (im.shape[1] / 2, im.shape[0] / 2))
im_m, im_c = color_track(im, g_min, g_max)
M0 = np.count_nonzero(im_m)
D0 = 50
while True:
// 入力画像の取得
im = cap:read()[1]
// 計算高速化のために画像サイズを1 / 2
im = cv2:resize(im, (im.shape[1] / 2, im.shape[0] / 2))
im_m, im_c = color_track(im, g_min, g_max)
// 白色領域の画素数を計算
M = np.count_nonzero(im_m)
D = format((sqrt(M0) / sqrt(M))*D0, ".2f")
// マスク画像から指定した色の領域を抽出
cv2:putText(im_m, "Moment:" + str(M), (30, 30), 1, 1.5, (150, 70, 50), 2) //数値要検証
cv2:putText(im_m, "Distance:" + str(D), (30, 70), 1, 1.5, (150, 70, 50), 2)
//結果表示
cv2:imshow("Camera", im)
cv2:imshow("Mask", im_m)
cv2:imshow("Color Tracking", im_c)
// キーが押されたらループから抜ける
if (cv2:waitKey(10) > 0)
{
cap.release()
cv2:destroyAllWindows()
}

break;

return 0;
}

###エラー
1>------ ビルド開始: プロジェクト:RL, 構成:Debug Win32 ------
1>C:\Program Files\MSBuild\Microsoft.Cpp\v4.0\V120\Microsoft.CppBuild.targets(388,5): warning MSB8028: The intermediate directory (Debug) contains files shared from another project (15sotuken.vcxproj). This can lead to incorrect clean and rebuild behavior.
1> RL.cpp
1>c:\users\sotuken\documents\visual studio 2013\projects\rl\15sotuken\rl.cpp(4): error C2146: 構文エラー : ';' が、識別子 'numpy' の前に必要です。
1>c:\users\sotuken\documents\visual studio 2013\projects\rl\15sotuken\rl.cpp(4): error C4430: 型指定子がありません - int と仮定しました。メモ: C++ は int を既定値としてサポートしていません
1>c:\users\sotuken\documents\visual studio 2013\projects\rl\15sotuken\rl.cpp(4): error C2146: 構文エラー : ';' が、識別子 'import' の前に必要です。
1>c:\users\sotuken\documents\visual studio 2013\projects\rl\15sotuken\rl.cpp(4): error C2143: 構文エラー : ';' が '*' の前にありません。
1>c:\users\sotuken\documents\visual studio 2013\projects\rl\15sotuken\rl.cpp(4): error C2059: 構文エラー : ';'
1>c:\users\sotuken\documents\visual studio 2013\projects\rl\15sotuken\rl.cpp(8): error C4430: 型指定子がありません - int と仮定しました。メモ: C++ は int を既定値としてサポートしていません
1>c:\users\sotuken\documents\visual studio 2013\projects\rl\15sotuken\rl.cpp(8): error C2065: 'np' : 定義されていない識別子です。
1>c:\users\sotuken\documents\visual studio 2013\projects\rl\15sotuken\rl.cpp(8): error C2228: '.array' の左側はクラス、構造体、共用体でなければなりません
1> 型は 'unknown-type' です。
1>c:\users\sotuken\documents\visual studio 2013\projects\rl\15sotuken\rl.cpp(8): error C2143: 構文エラー : ']' が '定数' の前にありません。
1>c:\users\sotuken\documents\visual studio 2013\projects\rl\15sotuken\rl.cpp(8): error C2059: 構文エラー : ']'
1>c:\users\sotuken\documents\visual studio 2013\projects\rl\15sotuken\rl.cpp(8): error C2059: 構文エラー : ')'
1>c:\users\sotuken\documents\visual studio 2013\projects\rl\15sotuken\rl.cpp(63): fatal error C1075: 左側 かっこ '(' に対応するものが 'c:\users\sotuken\documents\visual studio 2013\projects\rl\15sotuken\rl.cpp(19)' で見つかる前に EOF が検出されました。
========== ビルド: 0 正常終了、1 失敗、0 更新不要、0 スキップ ==========

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

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

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

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

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

guest

回答2

0

これはPythonのエラーではなく、C++のエラーですね。

>1>c:\users\sotuken\documents\visual studio 2013\projects\rl\15sotuken\rl.cpp(4): error C2146: 構文エラー : ';' が、識別子 'numpy' の前に必要です。
こんな感じで詳しくエラーの内容が書いてあるので、1つずつ解消していきましょう。

投稿2016/01/15 04:33

hiroki8080

総合スコア254

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

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

0

1.最初のエラーは他のプロジェクトのファイルを指定していることに怒っているようです。
(環境上の問題だと思うのでこれがエラーの主たる原因ではないと思います)

2.上の方がおっしゃっているとおり、エラー内容を読みましょう。
・そこにはエラーが発生したファイル名と行番号が明記されています
・同じ行数でたくさんエラーが出ている場合は最初のエラーに着目
(つまらない原因であるほど、玉突き事故を起こしてわけわからんエラーが大量に続きます)
・英文のエラー表示を読めないとしたら英語を勉強しましょう

3.これが一番の原因ですが、そもそもC++の勉強がまだ不足されているようで、Pythonの文を
そのままC++に持ってきていますね。
fromはC++にはありません。ここだけでいくつもエラーが吐き出されています。
そして全体に渡り、行末に必要なセミコロンがありません。
ある行のセミコロン一つ無いだけで、その後の行が全てエラー扱いになったりします。

投稿2016/01/15 19:21

編集2016/01/21 17:35
mike

総合スコア118

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

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

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

まだベストアンサーが選ばれていません

会員登録して回答してみよう

アカウントをお持ちの方は

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

ただいまの回答率
85.50%

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

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

質問する

関連した質問