EmguCV - Canny 函数抛出 _src.depth()==CV_8U
EmguCV - Canny function throwing _src.depth()==CV_8U
我目前正在从事一个使用 EmguCV 4.2 的项目
我需要使用Canny函数:
gray=gray.Canny(50, 200);
它抛出错误:
_src.depth()==CV_8U
我注意到只有当我之前在图像上使用 CvInvoke.Threshold() 时才会出现异常
CvInvoke.Threshold(skeleton,img,0,255,Emgu.CV.CvEnum.ThresholdType.Binary);
我想知道为什么会这样,没有 Threshold() 函数一切正常。这个函数是否以某种方式改变了我的图像的深度?
如何将其转换回 Canny() 函数而不会出现问题?
提前致谢。
根据我从您的问题中了解到的信息,您将图像转换为灰度可能存在问题。
下面的错误代码是指图像的深度类型,即图像的每个像素内可以容纳多少颜色值。在您的情况下,对于灰度图像,由于您只保存从黑色到白色的值,中间有不同的灰色变体,因此图像的深度类型会更小。
_src.depth()==CV_8U
如果您只是想将图像传递给 Canny 函数,则必须先将其转换为灰度。
// Read in the image from a file path
Mat img = CvInvoke.Imread(filePath, ImreadModes.AnyColor);
// Convert the image to gray scale
Image<Gray, byte> gray = img.ToImage<Gray, byte>();
// Threshold the image
CvInvoke.Threshold(gray, gray, 0, 100, ThresholdType.Binary);
// Canny the thresholded image
gray = gray.Canny(50, 200);
如果您只想将图像传递给 Canny 函数而不通过阈值,那么您可以使用下面的代码。
// Read in the image from a file path
Mat img = CvInvoke.Imread(filePath, ImreadModes.AnyColor);
// Convert the image to gray scale
Image<Gray, byte> gray = img.ToImage<Gray, byte>();
// Canny the thresholded image
gray = gray.Canny(50, 200);
我目前正在从事一个使用 EmguCV 4.2 的项目
我需要使用Canny函数:
gray=gray.Canny(50, 200);
它抛出错误:
_src.depth()==CV_8U
我注意到只有当我之前在图像上使用 CvInvoke.Threshold() 时才会出现异常
CvInvoke.Threshold(skeleton,img,0,255,Emgu.CV.CvEnum.ThresholdType.Binary);
我想知道为什么会这样,没有 Threshold() 函数一切正常。这个函数是否以某种方式改变了我的图像的深度? 如何将其转换回 Canny() 函数而不会出现问题?
提前致谢。
根据我从您的问题中了解到的信息,您将图像转换为灰度可能存在问题。
下面的错误代码是指图像的深度类型,即图像的每个像素内可以容纳多少颜色值。在您的情况下,对于灰度图像,由于您只保存从黑色到白色的值,中间有不同的灰色变体,因此图像的深度类型会更小。
_src.depth()==CV_8U
如果您只是想将图像传递给 Canny 函数,则必须先将其转换为灰度。
// Read in the image from a file path
Mat img = CvInvoke.Imread(filePath, ImreadModes.AnyColor);
// Convert the image to gray scale
Image<Gray, byte> gray = img.ToImage<Gray, byte>();
// Threshold the image
CvInvoke.Threshold(gray, gray, 0, 100, ThresholdType.Binary);
// Canny the thresholded image
gray = gray.Canny(50, 200);
如果您只想将图像传递给 Canny 函数而不通过阈值,那么您可以使用下面的代码。
// Read in the image from a file path
Mat img = CvInvoke.Imread(filePath, ImreadModes.AnyColor);
// Convert the image to gray scale
Image<Gray, byte> gray = img.ToImage<Gray, byte>();
// Canny the thresholded image
gray = gray.Canny(50, 200);