Visual studio 2010 无法从';cv::Mat';至';void*';

Visual studio 2010 无法从';cv::Mat';至';void*';,visual-studio-2010,opencv,Visual Studio 2010,Opencv,似乎我是唯一一个在Opencv 2.4.3中遇到这个问题的人 以下代码发布在该官方网站上: Size patternsize(8,6); //interior number of corners Mat gray = ....; //source image vector<Point2f> corners; //this will be filled by the detected corners //CALIB_CB_FAST_CHECK saves a lot of time

似乎我是唯一一个在Opencv 2.4.3中遇到这个问题的人

以下代码发布在该官方网站上:

Size patternsize(8,6); //interior number of corners
Mat gray = ....; //source image
vector<Point2f> corners; //this will be filled by the detected corners

//CALIB_CB_FAST_CHECK saves a lot of time on images
//that do not contain any chessboard corners
bool patternfound = findChessboardCorners(gray, patternsize, corners,
        CALIB_CB_ADAPTIVE_THRESH + CALIB_CB_NORMALIZE_IMAGE
        + CALIB_CB_FAST_CHECK);

if(patternfound)
  cornerSubPix(gray, corners, Size(11, 11), Size(-1, -1),
    TermCriteria(CV_TERMCRIT_EPS + CV_TERMCRIT_ITER, 30, 0.1));

drawChessboardCorners(img, patternsize, Mat(corners), patternfound);
并且,我尝试了以下方法,但仍然是相同的错误

static_cast<void*>(gray)
Error   1   error C2440: 'static_cast' : cannot convert from 'cv::Mat' to 'void *'  21


(void*)gray
Error   1   error C2440: 'type cast' : cannot convert from 'cv::Mat' to 'void *'    21
static\u cast(灰色)
错误1错误C2440:“静态_转换”:无法从“cv::Mat”转换为“void*”21
(空白*)灰色
错误1错误C2440:“类型转换”:无法从“cv::Mat”转换为“void*”21

我正在使用OpenCV 2.4.3。请帮忙。

< p> OpenCV文档中的示例代码使用C++接口(<代码> FiffChess BooDurks)。您正在调用C接口(
cvFindChessboardCorners
)。如果你有可能使用C++接口,我强烈推荐它。我认为你应该能够使用C++接口,因为如果你的代码编译成C,我不认为它会抱怨一个空的指针(虽然我可能错了!) 注意:根据名称空间的不同,您可能需要如下方式调用函数:

cv::findChessboardCorners


您应该能够直接传递您的
灰色
对象而无需任何施法。

谢谢,这很有帮助。但是为什么C函数不接受任何强制转换呢?它可能是使用reinterpret_cast(灰色)编译的。但问题是,即使如此,这也不是你想要的行为。C接口不是用来处理OpenCV的C++接口生成的对象。代码>:CMA: < /Cord>是处理图像的C++方式——它是C++接口的一部分。处理图像的C方式是
IplImage*
类型。这将直接强制转换到
void*
,而不需要显式强制转换,但是您将使用OpenCV的C接口。坚持C++!谢谢,我想我应该多看看演员的情况。如果我有15个名声,我会竖起大拇指。:)
static_cast<void*>(gray)
Error   1   error C2440: 'static_cast' : cannot convert from 'cv::Mat' to 'void *'  21


(void*)gray
Error   1   error C2440: 'type cast' : cannot convert from 'cv::Mat' to 'void *'    21