2016-06-16 8 views
1

私はいくつかの座標を収集してベクトルにプッシュし、最後にこれらのベクトルをイメージを作成し、存在する点をプロットする関数に送るプログラムを書いていますこれらのベクトル。範囲外のベクトル添え字エラー - C++ベクトル&オープンCV

私のプログラム:

#include<opencv\cv.h> 
#include<opencv\highgui.h> 
#include<iostream> 
#include<vector> 
using namespace cv; 
using namespace std; 


void image_creator(vector<float> jump_xx, vector<float> jump_yy, vector<float> mark_xx, vector<float> mark_yy) 
{ 

    Mat image_creator(Size(500, 500), CV_8UC3); 

    for (int i = 0; i < sizeof(jump_xx); i++) 
    { 
     line(image_creator, Point(jump_xx[i], jump_yy[i]), Point(mark_xx[i], mark_yy[i]), Scalar(155, 122, 155), 4, 2, 0); 
     waitKey(0); 
    } 
    namedWindow("Slice_Viewer1", CV_WINDOW_FREERATIO); 
    imshow("Slice_Viewer1", image_creator); 

} 

int main() 
{ 
    vector<float> jump_x; 
    vector<float> jump_y; 
    vector<float> mark_x; 
    vector<float> mark_y; 

    int x, y, a, b; 
    int choice; 

    jump_x.push_back(0.0); 
    jump_y.push_back(0.0); 

    mark_x.push_back(0.0); 
    mark_y.push_back(10.0); 

    jump_x.push_back(10.0); 
    jump_y.push_back(0.0); 

    mark_x.push_back(10.0); 
    mark_y.push_back(10.0); 

    image_creator(jump_x, jump_y, mark_x, mark_y); 

    return 0; 

} 

ビルドが成功しているが、私は、コードを実行したとき、私はこのエラーを取得:

enter image description here

答えて

2

sizeofはのオブジェクト表現のサイズをバイト単位で返します。 タイプは、現在のオブジェクトとは関係がなく、静的で固定です。要素の数が返されず、範囲外のエラーが発生する可能性があります。

std::vector::size()を使用してください。

for (int i = 0; i < jump_xx.size(); i++) 

変更

for (int i = 0; i < sizeof(jump_xx); i++) 

ところで:私は、あなたがコピーを避けるために、const参照渡しに値渡しのパラメータを変更することをお勧めします。

void image_creator(const vector<float>& jump_xx, const vector<float>& jump_yy, const vector<float>& mark_xx, const vector<float>& mark_yy) 
+0

ありがとうございました。 – Ramanan

+0

画像はプロットなしで生成されます。それはまだ私が推測して描画しようとしている..画像がつまって.....これはスレッドの問題のためですか?私はスレッドを作成する必要がありますか? – Ramanan

+0

これは別の質問です。問題をはっきりと述べる別の質問をする必要があります。この回答があなたに役立った場合は、それを受け入れたものとしてマークしてください。 – Ajay

関連する問題