矩形函数在c++objective-c中的应用

rectangle function use in c++ objective-c

本文关键字:应用 c++objective-c 函数      更新时间:2023-10-16

嗨,我一直在尝试在人脸检测矩形之后绘制第二个矩形,但参数x、y、h、w让我感到困惑。我在变量中尝试了不同的值,但我不明白它们的确切含义。我知道x,y应该移动到所需的位置,h,w应该重新调整它的大小

- (void)processImage:(cv::Mat &)image {
Mat gray;
std::vector<cv::Rect> faces;
Scalar color = Scalar(0, 255, 0);
cvtColor(image, gray, COLOR_BGR2GRAY);
_faceDetector.detectMultiScale(gray, faces, 1.1, 2, 0, cv::Size(60, 60));
for (int i = 0; i < faces.size(); i++) {
    rectangle(image, faces[i], color, 1);
    // x, y should move the rectangle to the desired position
    int x = faces[i].x;
    int y = faces[i].y;
    x=x+y;
    y=y+x;
    // h, w should resize the rectangle
    int he = y+faces[i].height*0.1 ;
    int we = x+faces[i].width*0.1;
    rectangle(image, cv::Point (x, y), cv::Point (we, he), Scalar(255,0,255),2,8,0);
}
}

有人能给我一个矩形的示意图吗?请把x,y,h,w的值放进去。感谢

x是X位置,y是Y位置。hw分别代表高度和宽度。

考虑以下矩形:

A --------- B
|           |
|           |
C --------- D

其位置(原点)由点A定义,其他角点相对于A定义。

A = (x, y)

B = (x + width, y)

C = (x, y + height)

D = (x + width, y + height)


您可能还应该重新访问

x=x+y;
y=y+x;

为什么在不同的轴上添加坐标是有意义的?

此外,使用在前一行上被覆盖的x的值很可能是有问题的。与初始值相比,您的计算结果为

finalX = x + y
finalY = y + (x + y) // because you're using the modified value of x