opencvsharp4.6中 delta.X = deltaPoint.At<double>(0, 0); “MatExpr”未包含“At”的定义,并且找不到可接受第一个“MatExpr”类型参数的可访问扩展方法“At”(是否缺少 using 指令或程序集引用?)
时间: 2023-09-28 09:09:54 浏览: 140
这个问题可能是因为在OpenCvSharp 4.6中,MatExpr类不支持At方法。MatExpr类是用于OpenCV表达式的类,它不是用于访问像素值的类。
如果你想要访问像素值,请使用Mat类或其子类,例如Mat_<double>。你可以通过以下代码获取像素值:
```
delta.X = deltaPoint.At<double>(0, 0);
```
替换为:
```
delta.X = deltaPoint.Get<double>(0, 0);
```
这个方法是用于获取像素值的,它可以用于Mat类和Mat_<T>类的对象。
如果你确实需要使用MatExpr类,请确保你已经正确地包含OpenCvSharp库,并且使用了正确的命名空间。如果你仍然无法解决这个问题,请提供更多的代码和错误信息,以便我更好地帮助你解决问题。
相关问题
void Caliper::SearchCaliperPath() { assert(!input_image_.empty() && input_image_.channels() == 1); //1. 初始化卡尺路径直线方程 angle = std::atan(k); // b = y - kx b = center.y - k * center.x; //2. 求取搜索起始点 min_x = center.x - len * std::cos(angle) * 0.5; if (min_x < 0) return; max_x = center.x + len * std::cos(angle) * 0.5; //3. 从起始点搜索,保存卡尺路径点集 path.clear(); pathPixelValue.clear(); // y = kx + b; double y = 0; for (int i = static_cast<int>(min_x); i < static_cast<int>(max_x); ++i) { y = i * k + b; path.push_back(cv::Point2d(i, y)); pathPixelValue.push_back(input_image_.at<uchar>(static_cast<int>(y), i)); } }//SearchCaliperPath 用opencvsharp4.6编写函数
这是一个使用 OpenCVSharp 4.6 编写的函数,用于搜索卡尺路径。具体来说:
1. 首先检查输入图像是否为空且通道数为1。
2. 初始化卡尺路径的直线方程,其中 k 表示斜率,b 表示截距。斜率 k 的计算采用 std::atan 函数,截距 b 的计算采用中心点坐标和斜率 k。
3. 求取搜索起始点,即卡尺路径的左右端点。左端点 min_x 的计算采用中心点坐标、卡尺长度 len 和角度 angle 计算得出。如果 min_x 小于0,则直接返回。右端点 max_x 的计算与 min_x 相似。
4. 从起始点开始搜索卡尺路径,保存路径点集和像素值。具体来说,从 min_x 到 max_x 循环,对于每个 x 坐标,计算出对应的 y 坐标(y = kx + b),然后将该点加入路径点集 path 中,并在输入图像中取出该点的像素值,加入 pathPixelValue 中。
注意,函数中使用的 Point2d 和 uchar 类型都是 OpenCVSharp 中定义的数据类型。
void Caliper::SearchCaliperPath() { assert(!input_image_.empty() && input_image_.channels() == 1); //1. 初始化卡尺路径直线方程 angle = std::atan(k); // b = y - kx b = center.y - k * center.x; //2. 求取搜索起始点 min_x = center.x - len * std::cos(angle) * 0.5; if (min_x < 0) return; max_x = center.x + len * std::cos(angle) * 0.5; //3. 从起始点搜索,保存卡尺路径点集 path.clear(); pathPixelValue.clear(); // y = kx + b; double y = 0; for (int i = static_cast<int>(min_x); i < static_cast<int>(max_x); ++i) { y = i * k + b; path.push_back(cv::Point2d(i, y)); pathPixelValue.push_back(input_image_.at<uchar>(static_cast<int>(y), i)); } }//SearchCaliperPath 用opencvsharp4.6编写c#函数
这是一个使用 OpenCVSharp 4.6 编写的 C# 函数,用于搜索卡尺路径。具体来说:
1. 首先检查输入图像是否为空且通道数为1。
```csharp
Assert.IsFalse(inputImage.Empty());
Assert.AreEqual(inputImage.Channels(), 1);
```
2. 初始化卡尺路径的直线方程,其中 k 表示斜率,b 表示截距。斜率 k 的计算采用 Math.Atan 函数,截距 b 的计算采用中心点坐标和斜率 k。
```csharp
var angle = Math.Atan(k);
var b = center.Y - k * center.X;
```
3. 求取搜索起始点,即卡尺路径的左右端点。左端点 min_x 的计算采用中心点坐标、卡尺长度 len 和角度 angle 计算得出。如果 min_x 小于0,则直接返回。右端点 max_x 的计算与 min_x 相似。
```csharp
var min_x = center.X - len * Math.Cos(angle) * 0.5;
if (min_x < 0) return;
var max_x = center.X + len * Math.Cos(angle) * 0.5;
```
4. 从起始点开始搜索卡尺路径,保存路径点集和像素值。具体来说,从 min_x 到 max_x 循环,对于每个 x 坐标,计算出对应的 y 坐标(y = kx + b),然后将该点加入路径点集 path 中,并在输入图像中取出该点的像素值,加入 pathPixelValue 中。
```csharp
var path = new List<Point2d>();
var pathPixelValue = new List<byte>();
for (var i = (int)min_x; i < (int)max_x; ++i)
{
var y = i * k + b;
path.Add(new Point2d(i, y));
pathPixelValue.Add(inputImage.Get<byte>((int)y, i));
}
```
注意,函数中使用的 Point2d 和 byte 类型都是 OpenCVSharp 中定义的数据类型。
阅读全文