是否有通过按不同按钮更改操作的功能

时间:2019-07-10 05:45:59

标签: c++ opencv

我想在屏幕中间显示一个十字并按键盘上的一些键来更改它的大小。

例如, 如果按b,则十字会变大。 如果按s,则十字会变小。 如果我按m,则十字应该变成中等。

#include "opencv2/opencv.hpp"
#include <iostream>

using namespace std;
using namespace cv;


int main()
{
    VideoCapture cap(0);

    while(true)
    {

        Mat frame;
        // Capture frame-by-frame
        cap >> frame;

        // If the frame is empty, break immediately
        if (frame.empty())
            break;
        // for converting the frame to grayscale  
        Mat gray;
        cvtColor( frame, gray , COLOR_BGR2GRAY);

        line( frame, Point( 300, 240 ), Point( 340,240), Scalar( 0, 0, 255 ),  2, 4 );
        line( frame, Point( 320, 260), Point( 320, 220), Scalar( 0, 0, 255 ), 2, 4);
        imshow(" figure ",frame);

        char c=(char)waitKey(25);
        if(c==27)
            break;
    }

    cap.release();
    destroyAllWindows();

    return 0;
}

请帮助我

1 个答案:

答案 0 :(得分:2)

我的建议是引入“ scale”变量,将通过按键对其进行修改以计算两条线的起点和终点。只需假设这些点定义为[start point] = [middle point] - [scale] * [scale factor][end point] = [middle point] + [scale] * [scale factor]。看起来像这样:

VideoCapture cap(0);
int size = 2;
bool drawCross = 1;
while(true)
{

    Mat frame;
    // Capture frame-by-frame
    cap >> frame;

    // If the frame is empty, break immediately
    if (frame.empty())
        break;
    // for converting the frame to grayscale  
    Mat gray;
    cvtColor( frame, gray , COLOR_BGR2GRAY);
    if (drawCross) {
        line( frame, Point( 320 - 10*size, 240 ), Point( 320 + 10*size,240), Scalar( 0, 0, 255 ),  2, 4 );
        line( frame, Point( 320, 240 - 10*size), Point( 320, 240 + 10*size), Scalar( 0, 0, 255 ), 2, 4);
    }
    imshow(" figure ",frame);

    char c=(char)waitKey(25);
    if(c==27)
        break;
    else if (c==[whatever this "small" key is])
        size = 1;
    else if (c==[whatever this "medium" key is])
        size = 2;
    else if (c==[whatever this "large" key is])
        size = 4;
    else if (c==[whatever this "do not draw cross" key is])
        drawCross = !drawCross;
}

==编辑== 解决方案现已修复,可以处理以下注释中给出的新“要求”。这是我对这个问题的最后一次输入,因为不是“您能为我写出来吗?”社区类型。您在评论中描述的问题需要我进行长达2分钟的谷歌搜索。而且,您需要继续学习基础编程,例如条件分支和填充。而且我不知道此代码是否100%有效,因为我现在不想安装C ++编译器。