2012-10-10 105 views
0

我是C++的新手,我試圖創建一個500x500像素的RGB圖像。圖像應該由四種顏色的線性插值來填充,每次角落的一個定義,所以我應該是這樣:C++ - 彩色像素

Vec3b ul(255, 0, 0); //upper left corner 
Vec3b ur(0, 255, 0); //upper right corner 
Vec3b bl(0, 0, 255); //bottom left corner 
Vec3b br(255, 0, 255); //bottom right corner 

最終的結果應該是這樣的:

enter image description here

程序然後在窗口等顯示圖像...我可以做的東西,但我只需要弄清楚如何把圖像中的顏色。到目前爲止我的代碼是這樣的:

#include <QtCore/QCoreApplication> 
#include <opencv/cv.h> 
#include <opencv/highgui.h> 
#include <iostream> 
#include <string> 
#include <sys/stat.h> 

using namespace cv; 
int main() 
{ 

    Mat image; 
    image.create(500, 500, CV_8UC3); 
    //upper left corner 
    Vec3b ul(255, 0, 0); 
    //upper right corner 
    Vec3b ur(0, 255, 0); 
    //bottom left corner 
    Vec3b bl(0, 0, 255); 
    //bottom right corner 
    Vec3b br(255, 0, 255); 

    namedWindow("Colored Pixels"); 
    imshow("Colored Pixels", image); 
    // shows image for 5 seconds 
    waitKey(5000); 
    return 0; 
} 

和輸出

enter image description here

我會很高興聽到您的建議!

+1

我不明白這與C++本身有什麼關係。 – Jack

回答

1

這聽起來像你真正要問的是'我如何設置代表圖像的OpenCV Mat實例的元素?'一個小的谷歌搜索產生這個link,它記錄了Mat界面。它包括與此簽名的函數:

模板_TP &墊::在(INT I,詮釋J)

所以,你應該能夠作出這樣image.at電話(100,250)以獲得對100,250處的像素的像素數據的參考。然後,將像素數據分配給像素。

至於如何在矩陣理解的形式分配的像素數據......下面也從上面的鏈接:

如果您熟悉CvMat中的OpenCV的類型符號,CV _ 8U ... CV _ 32FC3,CV _ 64FC2等,那麼原始類型可以定義爲一種類型,您可以通過以下形式給出唯一標識符:CV_ {U | S | F} C。能夠存儲這種基本數據類型的單個實例的通用OpenCV 是Vec。

所以,它聽起來像一個OpenCV類型爲int和大小爲3的Vec可能是兼容的。類似於:

image.at(i,j) = Vec<int,3>(r,g,b) 

有希望與您正在尋找的內容相當接近。

請注意,我沒有使用OpenCV,我沒有測試過這個代碼;這正是我從鏈接文檔中收集到的。