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

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

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

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

C++

C++はC言語をもとにしてつくられた最もよく使われるマルチパラダイムプログラミング言語の1つです。オブジェクト指向、ジェネリック、命令型など広く対応しており、多目的に使用されています。

受付中

OpenCVのcv::undistortPointsに座標情報を渡したいです.

koomint
koomint

総合スコア3

OpenCV

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

C++

C++はC言語をもとにしてつくられた最もよく使われるマルチパラダイムプログラミング言語の1つです。オブジェクト指向、ジェネリック、命令型など広く対応しており、多目的に使用されています。

1回答

0評価

0クリップ

289閲覧

投稿2022/01/16 12:18

OpenCVのcv::undistortPointsという画像歪み補正後の点を求める関数に,テキストファイルから読み込んだ座標を渡したいです.

自分がかいたコードを次に示します.発生したエラーもその次に示します.
問題なのは~~~~の後の部分です.
OpenCVのcv::undistortPointsの公式HP

c++

#include <iostream> #include <fstream> #include <vector> #include <cmath> #include <opencv2/opencv.hpp> #include <stdlib.h> //テキストファイルの指定行を取り出すために一旦全て読み込み int getStrFromText(std::string filename, std::vector<std::string> &vstr) { std::ifstream ifs(filename); if (!ifs) { std::cout << "error :>> failed to open the text file." << std::endl; return 1; } std::string tmp; while (getline(ifs, tmp)) vstr.push_back(tmp); return 0; } int main(int argc, char *argv[]){ //argcはプログラムの引数の数 //./bird image.jpgで実行したとしたらargv[0] = bird,argv[1] = image.jpgでargcは2 if(argc != 5){ std::cout << "\nERROR: too few parameters\n"; //help(argv); return -1; } //atoiは文字列を数値に変換 int board_w = atoi(argv[1]); int board_h = atoi(argv[2]); int board_n = board_w * board_h; cv::Size board_sz = cv::Size2i(board_w, board_h); //cv::Size board_sz(board_w, board_h); //読み込みでファイルを開く cv::FileStorage fs(argv[3], cv::FileStorage::READ); cv::Mat intrinsic, distortion; fs["camera_matrix"] >> intrinsic; fs["distortion_coefficients"] >> distortion; if(!fs.isOpened() || intrinsic.empty() || distortion.empty()){ std::cout << "Error: Couldn't load intrinsic parameters from " << argv[3] << std::endl; return -1; } fs.release(); //~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ //点の歪み補正と鳥瞰変換 const std::vector<cv::Point2f> dstdata1, dstdata2, dstdata3, dstdata4, dstdata11, dstdata22, dstdata33, dstdata44; //float dstdata1[1][2], dstdata2[1][2], dstdata3[1][2], dstdata4[1][2], dstdata11[1][2], dstdata22[1][2], dstdata33[1][2], dstdata44[1][2]; cv::Mat P; std::ifstream file1("../ryoiki/1x.txt"); //いくつかのある点のx座標が改行で縦に並んでいるテキストファイル std::string line1; //指定行読み込むために一旦全て読み込む std::vector<std::string> vstr1; getStrFromText("../ryoiki/1y.txt", vstr1); //いくつかのある点のy座標が改行で縦に並んでいるテキストファイル //1x.txtファイルと同じ行を読み込むためのカウント int count1 = 0; while (std::getline(file1, line1)) { // 1行ずつ読み込む std::vector<cv::Point2f> data1(stof(line1), stof(vstr1[count1])); //画像の歪み補正後の点座標を求める cv::undistortPoints(data1, dstdata1, intrinsic, distortion, P = intrinsic); //俯瞰変換後の点の座標を求める //Hの値は事前にわかっています cv::perspectiveTransform(dstdata1, dstdata11, H); std::ofstream ob1; ob1.open("./apps/bird/dstryo1xy.txt", std::ios::app); //ここでob1に出力する予定 count1 += 1; ob1.close(); }

error

error: no matching constructor for initialization of 'std::vector<cv::Point2f>' (aka 'vector<Point_<float>>') std::vector<cv::Point2f> data1(stof(line1), stof(vstr1[count1])); error: no matching constructor for initialization of 'std::vector<cv::Point2f>' (aka 'vector<Point_<float>>') std::vector<cv::Point2f> data2(stof(line2), stof(vstr2[count2])); error: no matching constructor for initialization of 'std::vector<cv::Point2f>' (aka 'vector<Point_<float>>') std::vector<cv::Point2f> data3(stof(line3), stof(vstr3[count3])); error: no matching constructor for initialization of 'std::vector<cv::Point2f>' (aka 'vector<Point_<float>>') std::vector<cv::Point2f> data4(stof(line4), stof(vstr4[count4]));

ファイルから読み込んだ値をfloat型にしていますが型が違うと返されてしまいます.
どなたかご教授ください.

良い質問の評価を上げる

以下のような質問は評価を上げましょう

  • 質問内容が明確
  • 自分も答えを知りたい
  • 質問者以外のユーザにも役立つ

評価が高い質問は、TOPページの「注目」タブのフィードに表示されやすくなります。

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

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

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

teratailでは下記のような質問を「具体的に困っていることがない質問」、「サイトポリシーに違反する質問」と定義し、推奨していません。

  • プログラミングに関係のない質問
  • やってほしいことだけを記載した丸投げの質問
  • 問題・課題が含まれていない質問
  • 意図的に内容が抹消された質問
  • 過去に投稿した質問と同じ内容の質問
  • 広告と受け取られるような投稿

評価を下げると、トップページの「アクティブ」「注目」タブのフィードに表示されにくくなります。

まだ回答がついていません

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

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

ただいまの回答率
87.20%

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

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

質問する

関連した質問

同じタグがついた質問を見る

OpenCV

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

C++

C++はC言語をもとにしてつくられた最もよく使われるマルチパラダイムプログラミング言語の1つです。オブジェクト指向、ジェネリック、命令型など広く対応しており、多目的に使用されています。