例えばアフィン変換する前の座標が点a(150,150)だったとすると、アフィン変換をした後、点aはどこの座標に移動してしまったのか知りたいと思っています。
pythonでの方法は見つけることができたのですがc++の方法が見つからなかったためわからないなりにpythonのプログラムを書き換えてみました。
アフィン変換自体は3点を指定してその3点を特定の3点に移動させる方法をとっています。
python
1import cv2 2 import numpy as np 3 im = cv2.imread('squares.jpg') 4 points1 = [[50,50],[150,50],[50,150]] 5 points2 = [[75,75],[150,50],[50,150]] 6 M = cv2.getAffineTransform(np.float32(points1), np.float32(points2)) 7 im2 = cv2.warpAffine(im, M, (200,200)) 8 cv2.imwrite('transformed_squares.jpg', im2) 9point = np.float32((150,150)) 10 x = point[0] 11 y = point[1] 12 new_x = M[0][0]*x + M[0][1]*y + np.float32(M[0][2]) 13 new_y = M[1][0]*x + M[1][1]*y + np.float32(M[1][2]) 14 print (int(new_x), int(new_y))
c++
1int main(int argc, char *argv[]) 2{ 3 Mat src_img = imread(imagename); 4 if (!src_img.data) 5 return -1; 6 const Point2f src_pt[] = { Point2f(a[0], b[0]), Point2f(a[1], b[1]), Point2f(a[47], b[47]) }; 7 const cv::Point2f dst_pt[] = { cv::Point2f(167, 207), cv::Point2f(327, 207), cv::Point2f(251, 485) }; 8 const Mat affine_matrix = getAffineTransform(src_pt, dst_pt); 9 Mat dst_img; 10 warpAffine(src_img, dst_img, affine_matrix, src_img.size()); 11 imwrite("dst.jpg", dst_img); 12 int point[] = { 150,150}; 13 int x = point[0]; 14 int y = point[1]; 15 int new_x = affine_matrix[0][0] * x + affine_matrix[0][1] * y + affine_matrix[0][2]; 16 int new_y = affine_matrix[1][0] * x + affine_matrix[1][1] * y + affine_matrix[1][2]; 17 printf("%d,%d",new_x, new_y); 18} 19
pythonのプログラムをc++で書き換えてみた結果affine_matrix[0][0]のところで
「(int) 0
これらのオペランドと一致する演算子[]はありません。
オペランドの型const cv::Mat[int]」
と出てしまいます。
pythonからc++に書き換えること自体初めてなので全然わかりません。
なぜこのような文がでてしまうのか教えていただきたいです。

回答2件
あなたの回答
tips
プレビュー
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。
2018/11/13 09:23