我創建OpenCV矩陣:如何通過CV_MAT_ELEM在多通道矩陣中設置元素?
CvMat * src = cvCreateMat(1, 2, CV_32FC2);
然後,我想設置元件列= 0,列= 1,通道= 1 據的documentation for CvMat 描述的例子中我試圖設置元件具有以下代碼:
CV_MAT_ELEM(*src, float, 0, 1 * 2 + 1) = 123;
但是assert
被解僱。
其原因是顯而易見的:
我們有以下的OpenCV的源defintions:
#define CV_MAT_ELEM_PTR_FAST(mat, row, col, pix_size) \
(assert((unsigned)(row) < (unsigned)(mat).rows && \
(unsigned)(col) < (unsigned)(mat).cols), \
(mat).data.ptr + (size_t)(mat).step*(row) + (pix_size)*(col))
#define CV_MAT_ELEM(mat, elemtype, row, col) \
(*(elemtype*)CV_MAT_ELEM_PTR_FAST(mat, row, col, sizeof(elemtype)))
在我的情況mat.cols == 2
和col == 1 * 2 + 1 == 3
。
什麼是錯:在OpenCV的源文件或斷言?
如何管理?
如何設置多通道矩陣的元素? 謝謝。
P.S. OpenCV開發者如果有人在這裏。
當我按「現在可以創建一個」來創建新帳戶來報告頁面http://opencv.willowgarage.com/wiki/Welcome?action=login中的錯誤時,我得到錯誤「未知操作newaccount」。
UPDATE:
我使用OpenCV的2.1。
該表單是Windows - 沒有問題。但是EmguCV內部使用C接口,並調查它的行爲。你能否澄清一下爲什麼doc和來源是一致的?你剛纔說沒有指出原因。謝謝。 – sergtk
重新檢查總是很好。我知道這個宏是有效的,但OpenCV文檔爲這個問題提供了更多的信息 - 只有單通道!請參閱上面的編輯 – Sam
該文檔說明如何在此處使用多聲道http://opencv.itseez.com/modules/core/doc/old_basic_structures.html?highlight=cvmat#CvMat - 請參閱多聲道註釋,當您說「單聲道只有「,你與文檔相矛盾! - doc中沒有這樣的限制。但是,鏈接到doc的示例不起作用。我不明白我的代碼有什麼問題。 – sergtk