我試圖將從Basler相機捕獲的幀轉換爲OpenCV的Mat格式。沒有很多的來自巴斯勒API文檔的信息,但這些都是在巴斯勒例子中,兩行應在確定什麼是有用的輸出格式爲:將Basler圖像轉換爲OpenCV
// Get the pointer to the image buffer
const uint8_t *pImageBuffer = (uint8_t *) Result.Buffer();
cout << "Gray value of first pixel: " << (uint32_t) pImageBuffer[0] << endl << endl;
我知道像什麼格式是(目前設置爲單聲道8位),並嘗試過:
img = cv::Mat(964, 1294, CV_8UC1, &pImageBuffer);
img = cv::Mat(964, 1294, CV_8UC1, Result.Buffer());
兩者都不起作用。任何建議/意見將不勝感激,謝謝!
編輯:我可以通過訪問像素巴斯勒圖像:
for (int i=0; i<1294*964; i++)
(uint8_t) pImageBuffer[i];
如果它轉換爲OpenCV中的墊格式幫助。
你是什麼意思,它不起作用?它是否會崩潰,或者您是否獲得了圖案圖像(即,您關閉了幾行或幾列甚至是幾個通道)?你可以發佈輸出嗎?它看起來像使用1294x964的全幀參數。這些真正有效的行是由Basler返回的,還是它們是前/後有效的行,它是1280x960?相機是提供分色輸出還是單色? – mevatron
嗨,代碼編譯和運行,但如果我嘗試使用'cv :: imshow()'顯示圖像,我得到一個錯誤窗口彈出說「basler_camera.exe已停止工作」。 1294 * 964是相機的最高分辨率,因此是正確的。我相信問題是從'pImageBuffer'複製到'img',但不知道如何正確執行。 –