我想从一张图片中提取红球,并在图片中获得检测到的椭圆矩阵.
我对图片进行阈值处理,使用findContour()函数找到红色球的轮廓,并使用fitEllipse()来拟合椭圆.
但我想要的是得到这个椭圆的系数.因为fitEllipse()返回一个旋转矩形(RotatedRect),所以我需要重新编写这个函数.
一个椭圆可以表示为Ax ^ 2 + By ^ 2 + Cxy + Dx + Ey + F = 0; 如果F为1(构造椭圆矩阵),我想得到u =(A,B,C,D,E,F)或u =(A,B,C,D,E).
我读了fitEllipse()的源代码,共有三个SVD过程,我想我可以从那三个SVD过程的结果中得到上述系数.但我很困惑每个SVD过程的每个结果(变量cv :: Mat x)代表什么,为什么这里有三个SVD?
这是这个功能:
cv::RotatedRect cv::fitEllipse( InputArray _points )
{
Mat points = _points.getMat();
int i, n = points.checkVector(2);
int depth = points.depth();
CV_Assert( n >= 0 && (depth == CV_32F || depth == CV_32S));
RotatedRect box;
if( n < 5 )
CV_Error( CV_StsBadSize, "There should be at least 5 points to fit the ellipse" …Run Code Online (Sandbox Code Playgroud) 是否可以通过使用OpenCV仅在原始图像的ROI部分进行一些图像处理操作?
我在互联网上搜索一些文章.大多数代码看起来像这样:
int main(int argc, char** argv) {
cv::Mat image;
image = cv::imread(argv[1], CV_LOAD_IMAGE_COLOR);
cv::Rect roi( 100, 100,200, 200);
//do some operations on roi
cv::waitKey(0);
return 0;
}
Run Code Online (Sandbox Code Playgroud)
实际上,它创建了一个名为roi的新图像,然后在新创建的图像中执行一些操作.我想直接在原始图像中进行操作.例如,我想做高斯模糊,只模糊原始图像中的roi部分的范围,并且不模糊该图像的其他部分.
因为新创建的图像roi与原始图像中的信息具有不同的信息.(比如坐标)我想保留这些信息.
这可能在OpenCV中这样做吗?如果是这样,怎么办?
我想在 Swift 中使用 iOS-Charts 绘制一些折线图来显示数据。现在,我有一个要求,在每个点旁边放一个小图标。
现在我可以在图形上添加 UIImage,但问题是如何正确获取每个点的 CGPoint 坐标。
如果我改变设备的方向或设备类型,图像的位置仍然是固定的,不会相应地改变。这是 iPhone 6s 图片。
这是我当前的代码:
for i in 0..<dataPoints.count {
let pointLeft = lineChartView.getPosition(dataEntries[i], axis: .Left)
let image = UIImage(named: numbers[i])
let imageView = UIImageView(image:image!)
imageView.frame = CGRect(x: pointLeft.x, y: pointLeft.y, width: 16, height: 16)
lineChartView.addSubview(imageView)
}
Run Code Online (Sandbox Code Playgroud)