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

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

ただいまの
回答率

88.03%

opencvの連番読み込み

解決済

回答 4

投稿 編集

  • 評価
  • クリップ 0
  • VIEW 4,154

score 36

今まで、iplimage型でコードを書いていたのですが、
多くの人の指摘があり、mat型に変更したいと考えています。

そこで、画像の連番読み込み、保存を行いたいと考えています。

以下のプログラムを作成してみたのですが、
オーバーロードされた関数"to_string"の複数のインスタンスが引数リストと一致します
というエラーがでました。

解決方法を教えていただけたらと思います。

動作環境は、opencv2.4.9です。

よろしくお願いします。

using namespace std;
using namespace cv;

int main(int argc,char** argv)
{
    for(int i=1;i<=10;i++)
    {
    string filename_i="C:\\opencv_ICImage\\2016-11-1 黒ネジ10本\\Image"+to_string(static_cast<double>(i))+".bmp";
    Mat src = imread(filename_i,IMREAD_UNCHANGED);
    resize(src,src,Size(),0.2,0.2);
    imshow("src",src);
    string filename_o="C:\\opencv_ICImage\\ノイズ除去 練習\\Image"+to_string(static_cast<double>(i))+".bmp";
    imwrite(filename_o, src);
    cout << filename_o << "" << filename_i << endl;
    waitKey(100);
    }
}


イメージ説明

イメージ説明

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

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

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

    クリップを取り消します

  • 良い質問の評価を上げる

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

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

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

    質問の評価を上げたことを取り消します

  • 評価を下げられる数の上限に達しました

    評価を下げることができません

    • 1日5回まで評価を下げられます
    • 1日に1ユーザに対して2回まで評価を下げられます

    質問の評価を下げる

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

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

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

    質問の評価を下げたことを取り消します

    この機能は開放されていません

    評価を下げる条件を満たしてません

    評価を下げる理由を選択してください

    詳細な説明はこちら

    上記に当てはまらず、質問内容が明確になっていない質問には「情報の追加・修正依頼」機能からコメントをしてください。

    質問の評価を下げる機能の利用条件

    この機能を利用するためには、以下の事項を行う必要があります。

回答 4

+2

こんにちは。

コンパイル・エラーではなく、インテリセンスのエラーですね?
もしそうなら、気持ち悪いのですが無視するしかないようです。インテリセンスは知的ではないと私は思います。

投稿

  • 回答の評価を上げる

    以下のような回答は評価を上げましょう

    • 正しい回答
    • わかりやすい回答
    • ためになる回答

    評価が高い回答ほどページの上位に表示されます。

  • 回答の評価を下げる

    下記のような回答は推奨されていません。

    • 間違っている回答
    • 質問の回答になっていない投稿
    • スパムや攻撃的な表現を用いた投稿

    評価を下げる際はその理由を明確に伝え、適切な回答に修正してもらいましょう。

  • 2016/11/07 12:57

    1280*960です。

    キャンセル

  • 2016/11/07 13:06 編集

    > ファイルのパスはあっていました。

    どうやって確認しました?
    ちゃんと画像をOpenCVが読み取れていることまで確認してますか?
    例えばepistemeさんの言うようにMatのサイズを確認するのが良いと思います。

    > resize元とresize先が同じsrcなのも気がかり。

    これも気にしておいた方が良いです。画像を読めているのに例外になるなら可能性があります。
    OpenCVの一部の関数はインプレースモード(http://imagingsolution.blog107.fc2.com/blog-entry-121.html)をサポートしてますが、どれがサポートしているのかリストがみつかりませんでした。

    ---
    コメントが前後しました。
    1280*960はプログラム上で確認されました?

    キャンセル

  • 2016/11/07 13:19

    ファイルパス

    使っているパス(コピーすると)が、他のプログラムでは正常に動作することを確認。

    1280*960
    プログラムで確認しました。

    キャンセル

checkベストアンサー

0

コードを記載するために、新たに回答欄で。

#include <sstream>
using namespace std;
using namespace cv;

int main(int argc,char** argv)
{
    string input_path = "C:\\opencv_ICImage\\2016-11-1 黒ネジ10本\\";
    string output_path = "C:\\opencv_ICImage\\ノイズ除去 練習\\";
    string filetop = "image";
    string fileExt = ".bmp";
    stringstream ext_number;


    for(int i=1;i<=10;i++)
    {
        ext_number.str("");
        ext_number.clear(stringstream::goodbit);
        ext_number << std::setw(5) << std::setfill('0') << i;
        string ext_number_str = ext_number.str();
        string filename_i= input_path+filetop+ext_number_str+fileExt;
        Mat src = imread(filename_i,IMREAD_UNCHANGED);
        resize(src,src,Size(),0.2,0.2);
        imshow("src",src);
        string filename_o= output_path+filetop+ext_number_str+fileExt;
        imwrite(filename_o, src);
        cout << filename_o << "" << filename_i << endl;
        waitKey(100);
    }
}


ではどうですか?

投稿

編集

  • 回答の評価を上げる

    以下のような回答は評価を上げましょう

    • 正しい回答
    • わかりやすい回答
    • ためになる回答

    評価が高い回答ほどページの上位に表示されます。

  • 回答の評価を下げる

    下記のような回答は推奨されていません。

    • 間違っている回答
    • 質問の回答になっていない投稿
    • スパムや攻撃的な表現を用いた投稿

    評価を下げる際はその理由を明確に伝え、適切な回答に修正してもらいましょう。

  • 2016/11/07 10:23

    ありがとうございます。質問に新しいエラーをのせたのですが、画像のサイズに問題があるためエラーがでているのでしょうか?

    キャンセル

  • 2016/11/07 17:20

    できました!!!ありがとうございます。
    差し支えなければ、前回との変更点の解説をお願いできないでしょうか?

    キャンセル

  • 2016/11/07 17:23

    うっかりミスでforの後に’ext_number'の文字列の初期化(空白化)を忘れていただけ。
    失礼しました。
    解決済みにしておいてください。

    キャンセル

0

to_string()の引数、なぜdoubleにcast?
単純にto_string(i)ではだめですか?

投稿

  • 回答の評価を上げる

    以下のような回答は評価を上げましょう

    • 正しい回答
    • わかりやすい回答
    • ためになる回答

    評価が高い回答ほどページの上位に表示されます。

  • 回答の評価を下げる

    下記のような回答は推奨されていません。

    • 間違っている回答
    • 質問の回答になっていない投稿
    • スパムや攻撃的な表現を用いた投稿

    評価を下げる際はその理由を明確に伝え、適切な回答に修正してもらいましょう。

  • 2016/11/04 16:15

    当初、to_string(i)でやっていたのですが、
    同様のエラーがでるため、変更してみました。

    キャンセル

  • 2016/11/04 16:22

    今、試してみた。
    to_string((long)i)
    にしてみてください。

    キャンセル

  • 2016/11/04 16:35

    同様のエラーが出ます。

    キャンセル

0

#include <iostream>
#include <opencv2/opencv.hpp>
using namespace cv;

int main(int argc, char *argv[]) {
    namedWindow("original", CV_WINDOW_AUTOSIZE);
    namedWindow("small", CV_WINDOW_AUTOSIZE);

    Mat original = imread("sample.png");
    Mat small;
    cv::resize(original, small, cv::Size(), 0.5, 0.5);

    imshow("original", original);
    imshow("small", small);
    waitKey();
}


...何の問題もありませんなぁ...

投稿

  • 回答の評価を上げる

    以下のような回答は評価を上げましょう

    • 正しい回答
    • わかりやすい回答
    • ためになる回答

    評価が高い回答ほどページの上位に表示されます。

  • 回答の評価を下げる

    下記のような回答は推奨されていません。

    • 間違っている回答
    • 質問の回答になっていない投稿
    • スパムや攻撃的な表現を用いた投稿

    評価を下げる際はその理由を明確に伝え、適切な回答に修正してもらいましょう。

  • 2016/11/07 14:18

    cv::recizeせずにそのままimwriteすれば、ファイルを作ることができます。

    キャンセル

  • 2016/11/07 14:21

    ちゃんと元画像の入ったファイルができるのね?
    ...だったらお手上げ。再現できんから。

    キャンセル

  • 2016/11/07 14:28

    はい。できます。
    ありがとうございました。

    キャンセル

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

  • ただいまの回答率 88.03%
  • 質問をまとめることで、思考を整理して素早く解決
  • テンプレート機能で、簡単に質問をまとめられる

関連した質問

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