我有一个小问题将我的脚本从 IplImage 转换为 CvMat 结构。大多数脚本我都没有问题,但是在我从我的 ueye 相机捕获图像的特定脚本中,我似乎无法找到一种方法来完成此操作,而无需将 IplImage 保留在两者之间。
我想做的是将 m_pcImageMemory 直接加载到 CvMat 结构中。但这是 CHAR .. 并且 cv::Mat 使用 UCHAR。
有人有一个示例如何创建一个空白 cv::Mat,创建正确的标题并将 m_pcImageMemory 加载到新的 cv::Mat 中吗?
请在下面查看我的代码:
cv::Mat getframeMat_ueye(){
if (m_hCam !=0) {
if (is_CaptureVideo (m_hCam, IS_WAIT) == IS_SUCCESS) {
is_RenderBitmap (m_hCam, m_lMemoryId, m_hWndDisplay, m_nRenderMode);
}
}
IplImage* tmpImg = cvCreateImageHeader (cvSize (m_nSizeX, m_nSizeY), IPL_DEPTH_8U, m_channels);
ueye_hasheader=true;
tmpImg->imageData = m_pcImageMemory;
cv::Mat retmat=cv::cvarrToMat(tmpImg);
cvReleaseImage(&tmpImg);
return retmat;
}
根据 Martin 他的评论,我将代码更改为:
cv::Mat getframeMat_ueye(){
if (m_hCam !=0) {
if (is_CaptureVideo (m_hCam, IS_WAIT) == IS_SUCCESS) {
is_RenderBitmap (m_hCam, m_lMemoryId, m_hWndDisplay, m_nRenderMode);
}
}
cv::Mat retmat(m_nSizeX, m_nSizeY,CV_8UC(m_channels),m_pcImageMemory);
return retmat;
}
但是,当我这样做时,返回的图像会失真,并且图像大小也不正确。(周围有宽度的大小。)
问候和感谢,弗洛里斯。