0

私は現在、コンピューター ビジョン プロジェクトに取り組んでいます。問題は、モード (色用) と SEGMENTATION ポインターを引数として取る関数にあります。これはセグメンテーション クラスです

pair<cv::Point, cv::Point> blobFind(int mode, SEGMENTATION * segment){
SEGMENTATION segm(640, 480);
segment->EncodeRuns();
segment->ConnectComponents();
segment->ExtractRegions();
segment->SortRegions();
//cout << "& " << endl;
if(mode==1){
    //cout << "& " << endl;
int x1,x2,y1,y2;
if(segment->colors[ORANGE].list!=NULL){
    x1 = segment->colors[ORANGE].list->x1;
    y1 = segment->colors[ORANGE].list->y1;
    x2 = segment->colors[ORANGE].list->x2;
    y2 = segment->colors[ORANGE].list->y2;
    cout << y1 << endl;
    return make_pair(cv::Point(x1,x2), cv::Point(y1,y2));
    }

この関数を呼び出すまでのメインは次のようになります。

int main()
{
IMAGE_CONTEXT *ic;
XEvent event;
cv::Mat image;
cv::VideoCapture cap(0);
cap.set( CV_CAP_PROP_FRAME_WIDTH, 640 );
cap.set( CV_CAP_PROP_FRAME_HEIGHT, 480 );
height = 480;
width = 640;
pair<cv::Point, cv::Point> nxt;
SEGMENTATION segm( width, height );
SEGMENTATION * segment = &segm;
// Creating a new window
ic = new_window( "Video", 100, 100, width, height );
XImage *xImage1 = ic->xImage;
unsigned char *imageLine1 = (unsigned char*) xImage1 -> data;

while( !end ) {
    cap.read(image);
    data = image.data;
    segment->readThresholds("conf");
    segment->thresholdImage(data);
    nxt = blobFind(1, segment);

コードが次のポイントに到達すると、セグメンテーション違反が発生します。blobFind 関数内。(segment->readThresholds("conf"); および segment->thresholdImage(data); も関数内にあり、関数データを追加フィールドとして指定しました。何が原因なのか手がかりはありますか?メインループ内で同じシーケンス (encoderuns、connectcomponents、extractregions、sortregions) を実行すると、完全に機能します。

4

0 に答える 0