###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 スキップ ==========

バッドをするには、ログインかつ
こちらの条件を満たす必要があります。