下午好,OpenCV的2.4.2字節數組墊產生一個奇怪的圖像模式
我想通過一個DLL
運行OpenCV
並在LabVIEW
應用程序中使用它。
我已正確獲取LV
中的圖像並將字節數組傳遞給DLL
。
我可以在文本文件中循環顯示每個像素的值並將它們與LV中的輸出進行匹配,因此我知道我的所有像素都處於正確的位置,因爲LV在開始時,前兩個值保留爲高度和寬度,其餘爲任意數字。但是,這一切應該做的是在圖像的左側產生條紋。
接下來,我使用以下幾行來轉換並顯示圖像。
a[0]
,a[1]
...等是渠道。
輸出圖像是一個非常水平向外延伸的圖像,像素間隔相等,間距爲15-20像素,周圍是黑色像素。我附上截圖
_declspec (dllexport) double imageProcess(int **a, int &x, int &y, int &cor,int &cog,int &cob,int &cow, int th, int hth)
{
y = a[0][0];
x = a[0][1];
Mat image(y, x, CV_8U, a[0]);
namedWindow("Display window", CV_WINDOW_NORMAL); // Create a window for display.
imshow("Display window", image); // Show our image inside it.
return (0);
}
此外,我使用此代碼具有相同效果的嘗試:
IplImage* cv_image = cvCreateImageHeader(cvSize(x,y), IPL_DEPTH_8U, 1);
cvSetData(cv_image, a[0], cv_image->widthStep);
Mat image = Mat(cv_image, false);
任何人都可以請幫我解釋一下這是爲什麼我的圖片創建期間發生了什麼?
請注意,不幸的是,我無法提供LV的原始圖像/捕捉,但我可以說它看起來不像這樣,我正在處理所有灰度。
輸出圖像:
謝謝你的迴應,我很驚訝,我沒有注意到。看來,解決這個問題的正確方法是使用char而不是int來調用我的DLL。但是這導致了Labview數據類型問題(不接受char或uint8_t),我已經在他們的論壇上發佈了這些問題。如果這不起作用,我會有一個非常基本的問題引發我的問題:如果我要循環訪問一個[0]並自己進行投射,那麼如何創建另一個具有相同數量元素的數組作爲[0],但是類型爲char。據我所知,我不能在C++中聲明一個未知大小的數組。 – Mich 2013-02-11 21:10:31