2013-07-11 90 views
0

下面是我在MATLAB中實現的一行,表示矩陣的行和列是靈活的。我可以添加任意數量的具有維度3的對象。我需要在OpenCV中執行相同的操作。在opencv中創建任意大小的數組/圖像?

ColorValues(:,:,3)=0; 

下面是我要轉換爲OpenCV的代碼:

ColorValues(:,:,3)=0; 
for i=1:M 
    for j=1:N 
     if (bw(i,j)==0) 
      ColorValues(i,j,:)=image(i,j,:); 
     else 
      ColorValues(i,j,:)=0; 
     end 
    end 
end 
+0

,你想創建一個新的矩陣,或試圖簡單地分配零沿第三維的第三片?這條線被認爲是在RGB圖像中清零B通道 – Amro

+1

我已經在matlab中做了這個..我創建了一個三維矩陣,具有靈活的大小。我想在opencv中做同樣的事情。我寫的這一行是在matlab中。 –

+0

我的問題仍然存在,你想在這裏實現什麼目標?你可以顯示更多的你的MATLAB代碼.. – Amro

回答

0

這裏是OpenCV中的一個例子。我們使用與輸入圖像相同大小的蒙版,通過使用Mat::setTo方法來將圖像中的值「歸零」。

#include "opencv2/highgui/highgui.hpp" 

int main() 
{ 
    // read an RGB image 
    cv::Mat img = cv::imread("lena.png", cv::IMREAD_COLOR); 
    if (!img.data) { 
     return -1; 
    } 

    // create a circular mask 
    cv::Mat mask = cv::Mat::zeros(img.rows, img.cols, CV_8UC1); 
    cv::circle(mask, cv::Point(img.rows/2,img.cols/2), 150, cv::Scalar(255), CV_FILLED); 

    // mask out the "on" values by setting them to zero 
    img.setTo(cv::Scalar::all(0), mask); 

    // show result 
    cv::namedWindow("demo", cv::WINDOW_AUTOSIZE); 
    cv::imshow("demo", img); 
    cv::waitKey(0); 

    return 0; 
} 

pic

在MATLAB
+0

謝謝,我解決了我的問題。 –

+0

很高興我能幫到你 – Amro

0

我不`噸想你想在這裏實現什麼是可能的OpenCV的。看看matrix constructor。你不需要分配內存 - 或者一旦你不需要它就釋放它;如果使用默認構造函數:

Mat A; 

這將創建一個「靈活」矩陣。如果你想要定義的類型(如3通道);那麼你也需要定義大小。這個目的沒有構造函數。

一種解決方案可以是爲創建一個非柔性的數據:

Mat B(1,3,CV_8UC1); 

然後從該矩陣使用的顏色數據。

作爲另一種方法,您可能需要查看C++的標準庫; listvector結構可能會對您有所幫助。

vector<vector<int> > imageCoordinates; 
vector<int> RGB(3); 

將創建靈活的圖像平面;並在單獨的數據中固定3通道。

+0

okie ..感謝,我會嘗試一下 –

+0

你能告訴我我怎麼能在C而不是C++中做到這一點。 –