伊莉討論區

標題: code-black 使用opencv 建立專案副程式讀取問題 [打印本頁]

作者: j9242kimo    時間: 2012-9-25 08:49 PM     標題: code-black 使用opencv 建立專案副程式讀取問題

各位好~我是code-black、opencv的初學者,剛開始寫有關影像應用的程式,使用到opencv,對程式某些觀念不夠清楚,導致碰到很多問題,在這裡想請教各位。
因為我的主程式要處裡一連串的問題,所以教授說建立一個專案,將所有單一「功能」寫為一個副程式,如果有需要,副程式內再做切割。
主程式功能分為
1.init                 連接阜初始化→在此不考慮
2.correction      攝影機校正→在此不考慮
3.get_oneline    所拍攝影像只取其一行(會有1800張不同影像)

4.new_picture   將1800張只取一行影像合成為一張影像
本人想法3.4項應該可合併寫為一個副程式


----------------------------------------------------------------------------------------------------------------------
(main.cpp)
#include "header.h"
using namespace std;
using namespace cv;

int main()
{
    CvMat *new_picture=cvCreateMat(1800,640,CV_8UC1);
   // CvMat *image_part=cvCreateMat(1,640,CV_8UC1);



    //init();
    //Correction();
    void get_oneline(CvMat *new_picture);
    //new_picture;

    return 0;
}

----------------------------------------------------------------------------------------------------------------------
(header.h)
#ifndef HEADER_H_INCLUDED
#define HEADER_H_INCLUDED
#include <cv.h>
#include <stdio.h>
#include <highgui.h>

#endif // HEADER_H_INCLUDED

----------------------------------------------------------------------------------------------------------------------
(get_oneline.cpp)
#include "header.h"

void get_oneline(CvMat *image)
{
    IplImage *no_process_image;
    IplROI ROI;
    CvRect Rect1;

    no_process_image=cvLoadImage("abc.jpg",1);  //對某張影像處理,abc.jpg為一張8位元640*480的影像
    Rect1=cvRect(320,0,1,480);
    //cvRect(X座標數據,Y座標數據,寬度數據,高度數據)
    ROI=cvRectToROI(Rect1,0);
    no_process_image->roi=&ROI;
    //cvNamedWindow("Region Of Interesting",1);
    //cvShowImage("Region Of Interesting",no_process_image);
    //cvWaitKey(15000);
    //cvSaveImage("image_part.jpg",no_process_image);
}

----------------------------------------------------------------------------------------------------------------------
我的想法是建立一個640*1800的配置矩陣用來存放每一個get_oneline()傳回值
問題1:
只是不知道在主程式get_oneline()的地方傳入引數應該要設為何,才能進引導進入副程式當中,
而傳回值如何傳回一個640*1的影像配置於建立640*1800的配置矩陣中

問題2:
如果要建立配置矩陣是主程式內
CvMat *new_picture=cvCreateMat(1800,640,CV_8UC1);
這行指令對嗎?   
這邊個人還有點疑惑,如果正確的話  這行配置矩陣應該放在副程式get_oneline()內還是主程式內呢?

問題3:
因為在get_oneline()內只有一張影像,只為了要測試用,功能上也只有讀取影像,跟取此影像(320,0)位置寬度1長度640的影像,顯示並且儲檔。
所以整體上編譯會有問題     (因為我不知道該如何使用void傳回640*1的影像)

我有將get_oneline()獨立建立一個專案獨立測試,此段程式可以正常執行,取得640*1的影像並儲存
#include <iostream>
#include <cv.h>
#include <highgui.h>
#include <stdio.h>

int main()
{
    IplImage *image;
    IplROI ROI;
    CvRect Rect;

    image = cvLoadImage("IMAG0204.jpg",1);
    Rect=cvRect(320,0,1,480);
    //cvRect(X座標數據,Y座標數據,寬度數據,高度數據)
    ROI=cvRectToROI(Rect,0);
    image->roi=&ROI;

    cvNamedWindow("Region Of Interesting",1);
    cvShowImage("Region Of Interesting",image);
    cvWaitKey(15000);
    cvSaveImage("image_new.jpg",image);
    return 0;
}

----------------------------------------------------------------------------------------------------------------------
我想問兩者之間的差異,如果我要更改最初的專案使用void傳回640*1的影像並放入我所配置的矩陣
應該要如何更改?

※由於是自己初學寫的程式,內部細節可能有很多錯誤,也請各位可以提出更正指教,謝謝幫忙解答。

作者: dh3014    時間: 2012-9-26 12:54 AM

提示: 作者被禁止或刪除 內容自動屏蔽
作者: j9242kimo    時間: 2012-9-26 12:33 PM

本帖最後由 j9242kimo 於 2012-9-26 04:58 PM 編輯

在問題3中放在主程式內的副函式
void get_oneline (cvMat * image, cvMat * return_image)
可以把它改為下列這一行嗎?
void get_oneline (cvMat * return_image)
只放入最初始配置的矩陣,利用傳回值再更改它內部的值
如果這樣的話 是不是應該在主程式內先加上下列這行呢?
CvMat *return_image=cvCreateMat(1800,640,CV_8UC1);

另外,今天想嘗試將在get_oneline()副函式所存檔的image_part.jpg的這張影像矩陣(我原以為應該是640*1,不過電腦jpg詳細資料為1*480,所以前面的配置矩陣也要跟著改列行)
放入一開始配置矩陣的第一列位置,但是怎麼試都失敗了,想問該怎麼可以直接顯示矩陣內所有的值,來確認我是否有成功將image_part.jpg這張影像成功放入配置矩陣?





歡迎光臨 伊莉討論區 (http://saki.eyny.com/) Powered by Discuz!