我是使用OpenCV的新手。我在visual studio 2013和opencv 3.1中使用c ++。我想计算Canny边缘,这是我的代码:
UMat getImage()
{
return imread("...\\myPic.jpg").getUMat(ACCESS_FAST);
}
int _tmain(int argc, _TCHAR* argv[])
{
UMat u;
u = getImage();
cv::Canny(u, u, 100, 50);
namedWindow("Display window", WINDOW_AUTOSIZE);// Create a window for display.
imshow("Display window", u);
getchar();
return 0;
}
怎么了?我注意到在使用Mat
实例的情况下我可以看到我的照片。
您编写的代码有2个问题。
1)如果没有轻微的停顿,imshow将无法正确显示您的图像。您需要在imshow之后添加函数waitkey(0)以使图像正确显示结果。
2)处理UMat变量时,最好接收和返回参考矩阵,而不是返回整个矩阵,因为UMat内存并不总是在CPU空间中。以下是您的代码的外观
void getImage(cv::OutputArray u)
{
cv::imread("...\\myPic.jpg").getUMat(cv::ACCESS_FAST).copyTo(u);
}
int main(int argc, const char** argv)
{
cv::UMat u;
getImage(u);
cv::Canny(u, u, 100, 50);
cv::namedWindow("Display window", cv::WINDOW_AUTOSIZE);// Create a window for display.
cv::imshow("Display window", u);
cv::waitKey(0);
getchar();
return 0;
}
祝好运