
opencvに関する質問です。
64×64画像の画素値をMat行列に格納し、
その行列をvectorに変換するプログラムなのですが、
その変換の部分でうまくいきません。原因はなんでしょうか。
よろしくお願いいたします。
#include <opencv2/core/core.hpp>
#include <opencv2/highgui/highgui.hpp>
#include<stdio.h>
#include<iostream>
#include<fstream>
#include<vector>
#include <stdlib.h>
using namespace cv;
using namespace std;
int main(int argc, char *)
{
vector <float> v1;
Mat A = imread( "分割1-1\0015.bmp",);//Aに画像を読み込み
A= A.reshape(0,1);//Aを1行の行列へ変換
A.copyTo(v1);//Aをベクトルv1に変換
waitKey(0);
return 0;
}
A 回答 (4件)
- 最新から表示
- 回答順に表示
No.4
- 回答日時:
atメソッドを使ったり、ptrメソッドを使ったりします。
http://opencv.jp/opencv2-x-samples/access_pixel_ …
の C++版 。これは、各画素の書き込むものですが、= の左右を逆に考えれば、各画素の値を読み出すのに使えます。
追記:
調べたところ、 cv::Mat::copyToで、std::vectorにコピーすること自体はできるようです。
http://book.mynavi.jp/support/pc/opencv2/c3/open …
ただ、その場合、Matの型、チェンネルとvectorの型を揃える必要があるように思います。
また、OpenCVのバージョンによっては、 型を指定する必要があります。
それで気になっているんですが、
おそらく、 〜.bmpは、 8bit x 3チャンネル(3色) です。
それに対して、 v1は <float> となっています。
v1には、どんなデータを入れたいとお考えなのでしょうか?
事前に型や色を変換するとか、vectorを適切な型にするとかが必要と思われます。
# 今OpenCVを使える環境が無いので、当方で確認することはできません
ありがとうございます。
v1には、bmpの画素値が入ったMatをコピーしたいと考えています。
ちなみに、bmpは64×64のグレー画像です。
この画像の画素値をまずMatに格納し、それをv1にコピーしたいと考えています。
型についての知識がないため、迷惑をかけるかもしれませんが、
よろしくお願いいたします。
No.3
- 回答日時:
エラーメッセージ読んでもわかりませんか?
#1のコードは
vector< vector > &dst
あなたのコードは
vector <float> v1
難しいようなら、まとめてやろうとは思わず、
Aから1個選択→ v1にpush_back を全データについて繰り返す
って、単純なプログラムにしてはどうです?
No.2
- 回答日時:
の繰り返しになりますけど、
** 「うまくいかない」とは、具体的にどんな現象から判断していますか? **
そもそも、コンパイル自体が成功しない。
画像の読み込み が「うまくいかない」
画像は読み込めたけど、 1行の行列へ変換が「うまくいかない」
画像は読み込めたし、1列の行列の変換するのもできたけど、 vectorに変換するのが「うまくいかない」
それぞれで対策が違います。
正常動作している部分がわからなければ、せっかく正しいのに逆に間違えてしまうこともあります。
Mat A = imread( "分割1-1\0015.bmp",)
・目に見えておかしいのが文字列リテラル(文字列の定数)
\ が特別扱いになるのはご存知ですよね?
・"のあとの . ) って、文法エラーになりませんか? カンマだけで引数省略、なんて書き方、C++ではできないはずです。
・ファイルを正しく読めていることを確認してください。
ファイル操作は失敗が多いです(USBディスクを指定したけど抜いた後だった、とか)
http://opencv.jp/opencv-2svn/cpp/reading_and_wri …
A= A.reshape(0,1);//Aを1行の行列へ変換
マニュアルによると「チャンネル(カラーとかグレースケールとか) を変えずに1行に変形」 ということになりますが、それで正しいですか?
A.copyTo(v1);//Aをベクトルv1に変換
マニュアルを読む限りでは、 cv::Matからcv::Matへコピーするもので、 std::vectorにコピーするようには見えないのですが。
別のバージョンではstd::vectorへコピーするようになったのでしょうか?
http://opencv.jp/opencv-2svn/cpp/core_basic_stru …
ありがとうございます。やってみたところ、for文の中でエラーが起きるのですが、どんな原因なんでしょうか。
vector <float>v1;
Mat A = imread(”分割1-1\¥0015.bmp”);//Aに画像を読み込み
A= A.reshape(0,1);//Aを1行の行列へ変換
for (int i = 0; i< image.rows; i++)
{
v1.push_back(image.row(i));//ここでv2.push_backはできないというエラーが出ます
}
No.1
- 回答日時:
copyToメソッドは
void Mat::copyTo(Mat& m )
なので、vectorに変換することができません。
vectorに変換するためには以下のように逐次追加する必要があります(URL先から引用)
void MatToVec(const Mat &src, vector< vector > &dst){
for(int i = 0; i< src.rows; i++ ){
dst.push_back(src.row(i));
}}
引用元
http://utunes.blog.fc2.com/blog-entry-10.html
ありがとうございます。やってみたところ、for文の中でエラーが起きるのですが、どんな原因なんでしょうか。
vector <float> v1;
Mat A = imread( "分割1-1\¥0015.bmp");//Aに画像を読み込み
A= A.reshape(0,1);//Aを1行の行列へ変換
for (int i = 0; i< image.rows; i++)
{
v2.push_back(image.row(i));//ここでv2.push_backはできないというエラーが出ます
}
お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!
似たような質問が見つかりました
- C言語・C++・C# このプログラミング誰か教えてくれませんか 1 2022/06/02 15:27
- C言語・C++・C# C++プログラミングコードにポリモーフィズムを取り入れ方を教えてください。 2 2023/06/09 11:17
- C言語・C++・C# C++初心者です stirng 2 2022/09/20 20:43
- C言語・C++・C# バイナリファイルをコピーするのにかかる時間を測りたいのですが実行するとFatel error:gli 2 2022/11/03 01:10
- C言語・C++・C# 並列プログラミングのπ計算について 1 2022/07/16 22:30
- C言語・C++・C# C++のcinの動作 5 2023/02/26 00:13
- C言語・C++・C# c言語 プログラムのエラー 1 2023/02/11 20:31
- C言語・C++・C# c言語の問題です 課題1 (二分探索木とセット) 大きさ size の配列 array を考える。す 2 2023/01/10 21:08
- C言語・C++・C# プログラミングの授業の課題です 1 2023/01/17 22:15
- C言語・C++・C# c言語の問題の説明、各所ごとに 5 2023/07/26 11:03
このQ&Aを見た人はこんなQ&Aも見ています
関連するカテゴリからQ&Aを探す
おすすめ情報
このQ&Aを見た人がよく見るQ&A
デイリーランキングこのカテゴリの人気デイリーQ&Aランキング
-
逆コンパイルと逆アセンブルの...
-
家電製品の電力周波数を変える機械
-
線対称の角度を求める
-
mikroC 文字を数値に変換
-
n次元の正規直交基底ベクトルの...
-
AUのA1000シリーズのHDMLについて
-
tex 郵便記号のだしかた
-
画像の貼り付けをするのに、拡...
-
VC++2005 CStringをshortに変換
-
エクセルVBAの自動変換機能?
-
vb.netの型変換について
-
C#でのpngからbmpへの変換について
-
8進法 16進法 2進法について
-
文字セットの変換
-
isoをimgに変換したいのですが...
-
PIC16F877を用いたC言語でのAD...
-
緯度、経度の 10進法と 60進法...
-
ImageMagickでPSDを変換するには。
-
PHPで日本語を英語にする方法?
-
画像ファイル変換(Tiff→PDF)
マンスリーランキングこのカテゴリの人気マンスリーQ&Aランキング
-
家電製品の電力周波数を変える機械
-
エクセルVBAの自動変換機能?
-
マンセル⇔XYZ,RGB変換式或いは...
-
なぜ通信には16進数文字列が使...
-
分を時間に変換するプログラム
-
緯度、経度の 10進法と 60進法...
-
【EXCEL】カナ、ひらがなを英字...
-
10進数をBCDに変換する方法
-
FortranをC++(VC++)へ変換
-
VB 6 を VS 2012に変換するには?
-
シーケンサのCPUはニーモニック...
-
VB6からVB2010への変換について
-
StrConvの使い方について教えて...
-
VB.NETをJavaに変換するツール...
-
Mac 乗数の入力方法
-
VB6で10進数を32進数に変換する...
-
画像ファイル変換(Tiff→PDF)
-
isoをimgに変換したいのですが...
-
C/C++→JAVAに変換するツール
-
UTF8→ShiftJISに変換したいです!
おすすめ情報