我想在屏幕中间显示一个十字并按键盘上的一些键来更改它的大小。
例如, 如果按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;
}
请帮助我
答案 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 ++编译器。