gpt4 book ai didi

c# - 使用cvTransform和cvGetAffineTransform openCv调整矩形大小

转载 作者:行者123 更新时间:2023-12-02 17:55:18 26 4
gpt4 key购买 nike

iam处理多尺度图像,三种尺寸:原始,一半和两倍
我分别从它们的每一个中提取连接的组件,然后进行一些计算

最后,我想将一半和两倍比例连接的组件的边界矩形映射到它们在原始图像中的原始位置和大小

这是我调整和重新定位边界矩形的代码

        Matrix<int> src = new Matrix<int>(3, 2,3);
Matrix<int> dst = new Matrix<int>(3, 2,2);

IntPtr mat = CvInvoke.cvCreateMat(2, 3, MAT_DEPTH.CV_32F);

src[0,0]=componentBRect.X;
src[0,1]=componentBRect.Y ;
src[1,0]=componentBRect.Right;
src[1,1]=componentBRect.Y;
src[2,0]=componentBRect.X;
src[2,1]=componentBRect.Bottom;





CvInvoke.cvGetAffineTransform(img2, img, mat); //img is the original image & img2 has been resized to 1/2 imgWidth and 1/2 imgHeight

CvInvoke.cvTransform(src.Ptr, dst.Ptr, mat, IntPtr.Zero);

它应该重新设置dst点并重新放置
但是不幸的是再次返回了相同的点,我认为getAffineTransform存在一个问题,因为它返回了一个单位矩阵
 mat= 
|1 0 0 |
|0 1 0 | !!

有什么建议么 ??还是有另一种方法可以执行我想要的而不使用仿射变换

提前致谢

最佳答案

我已经解决了

我只是找到了另一个功能-它是cvConvertScale

       for (int i = 0; i < Brectangles.Count; i++) {

src[0, 0] = Brectangles[i].X; //top left
src[0, 1] = Brectangles[i].Y;
src[1, 0] = Brectangles[i].Right; //top right
src[1, 1] = Brectangles[i].Y;
src[2, 0] = Brectangles[i].X; //bottom left
src[2, 1] = Brectangles[i].Bottom;


CvInvoke.cvConvertScale(src, dst, rescaleFactor, 0); // rescaleFactor variable is 2 for half size & 0.5 for double size

temp.X = dst[0, 0];
temp.Y = dst[0, 1];
temp.Width = dst[1, 0] - dst[0, 0];
temp.Height = dst[2, 1] - dst[0, 1];

Brectangles[i] = temp;


}

它调整矩形的大小并将其重新放置在新大小的适当位置

关于c# - 使用cvTransform和cvGetAffineTransform openCv调整矩形大小,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/6568403/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com