Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/opencv/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
将opencv库与g+链接+; 你好,我正在尝试编译一个C++文件,用于眼动追踪。 但我对这一点有点陌生,我真的不理解库是如何链接的。 我知道include头的绝对路径位于/user/include/opencv2中。 如何在gcc命令行(ubuntu)中链接它? 我试过这个命令: $ g++ -Wall eye-tracking.cpp -o eyeTracking $ pkg-config --libs opencv_C++_Opencv_G++_Libraries - Fatal编程技术网

将opencv库与g+链接+; 你好,我正在尝试编译一个C++文件,用于眼动追踪。 但我对这一点有点陌生,我真的不理解库是如何链接的。 我知道include头的绝对路径位于/user/include/opencv2中。 如何在gcc命令行(ubuntu)中链接它? 我试过这个命令: $ g++ -Wall eye-tracking.cpp -o eyeTracking $ pkg-config --libs opencv

将opencv库与g+链接+; 你好,我正在尝试编译一个C++文件,用于眼动追踪。 但我对这一点有点陌生,我真的不理解库是如何链接的。 我知道include头的绝对路径位于/user/include/opencv2中。 如何在gcc命令行(ubuntu)中链接它? 我试过这个命令: $ g++ -Wall eye-tracking.cpp -o eyeTracking $ pkg-config --libs opencv,c++,opencv,g++,libraries,C++,Opencv,G++,Libraries,似乎我还需要链接其他库。我尝试使用以下命令链接找到的对象: $ g++ -Wall eye-tracking.cpp -o eyeTracking $ pkg-config --libs opencv 但在这里,我仍然不知道如何将输出链接到我的命令。 我通过输入以下命令尝试使用我的逻辑: $g++ -Wall eye-tracking.cpp -I `pkg-config --libs opencv` -o eyeTracking 当然不行,我真的不明白我在做什么:p 有人能给我解释一下怎

似乎我还需要链接其他库。我尝试使用以下命令链接找到的对象:

$ g++ -Wall eye-tracking.cpp -o eyeTracking
$ pkg-config --libs opencv
但在这里,我仍然不知道如何将输出链接到我的命令。 我通过输入以下命令尝试使用我的逻辑:

$g++ -Wall eye-tracking.cpp -I `pkg-config --libs opencv` -o eyeTracking
当然不行,我真的不明白我在做什么:p

有人能给我解释一下怎么做吗

在这里您可以找到整个文件代码:

/**
* eye-tracking.cpp:
* Eye detection and tracking with OpenCV
*
* This program tries to detect and tracking the user's eye with webcam.
* At startup, the program performs face detection followed by eye detection
* using OpenCV's built-in Haar cascade classifier. If the user's eye detected
* successfully, an eye template is extracted. This template will be used in
* the subsequent template matching for tracking the eye.
*/
#include <opencv2/imgproc/imgproc.hpp>
#include <opencv2/highgui/highgui.hpp>
#include <opencv2/objdetect/objdetect.hpp>

cv::CascadeClassifier face_cascade;
cv::CascadeClassifier eye_cascade;

/**
* Function to detect human face and the eyes from an image.
*
* @param im The source image
* @param tpl Will be filled with the eye template, if detection success.
* @param rect Will be filled with the bounding box of the eye
* @return zero=failed, nonzero=success
*/
int detectEye(cv::Mat& im, cv::Mat& tpl, cv::Rect& rect)
{
std::vector<cv::Rect> faces, eyes;
face_cascade.detectMultiScale(im, faces, 1.1, 2, 0|CV_HAAR_SCALE_IMAGE, cv::Size(30,30));

for (int i = 0; i < faces.size(); i++)
{
cv::Mat face = im(faces[i]);
eye_cascade.detectMultiScale(face, eyes, 1.1, 2, 0|CV_HAAR_SCALE_IMAGE, cv::Size(20,20));

if (eyes.size())
{
rect = eyes[0] + cv::Point(faces[i].x, faces[i].y);
tpl = im(rect);
}
}

return eyes.size();
}

/**
* Perform template matching to search the user's eye in the given image.
*
* @param im The source image
* @param tpl The eye template
* @param rect The eye bounding box, will be updated with the new location of the eye
*/
void trackEye(cv::Mat& im, cv::Mat& tpl, cv::Rect& rect)
{
cv::Size size(rect.width * 2, rect.height * 2);
cv::Rect window(rect + size - cv::Point(size.width/2, size.height/2));

window &= cv::Rect(0, 0, im.cols, im.rows);

cv::Mat dst(window.width - tpl.rows + 1, window.height - tpl.cols + 1, CV_32FC1);
cv::matchTemplate(im(window), tpl, dst, CV_TM_SQDIFF_NORMED);

double minval, maxval;
cv::Point minloc, maxloc;
cv::minMaxLoc(dst, &minval, &maxval, &minloc, &maxloc);

if (minval <= 0.2)
{
rect.x = window.x + minloc.x;
rect.y = window.y + minloc.y;
}
else
rect.x = rect.y = rect.width = rect.height = 0;
}

int main(int argc, char** argv)
{
// Load the cascade classifiers
// Make sure you point the XML files to the right path, or
// just copy the files from [OPENCV_DIR]/data/haarcascades directory
face_cascade.load("haarcascade_frontalface_alt2.xml");
eye_cascade.load("haarcascade_eye.xml");

// Open webcam
cv::VideoCapture cap(0);

// Check if everything is ok
if (face_cascade.empty() || eye_cascade.empty() || !cap.isOpened())
return 1;

// Set video to 320x240
cap.set(CV_CAP_PROP_FRAME_WIDTH, 320);
cap.set(CV_CAP_PROP_FRAME_HEIGHT, 240);

cv::Mat frame, eye_tpl;
cv::Rect eye_bb;

while (cv::waitKey(15) != 'q')
{
cap >> frame;
if (frame.empty())
break;

// Flip the frame horizontally, Windows users might need this
cv::flip(frame, frame, 1);

// Convert to grayscale and
// adjust the image contrast using histogram equalization
cv::Mat gray;
cv::cvtColor(frame, gray, CV_BGR2GRAY);

if (eye_bb.width == 0 && eye_bb.height == 0)
{
// Detection stage
// Try to detect the face and the eye of the user
detectEye(gray, eye_tpl, eye_bb);
}
else
{
// Tracking stage with template matching
trackEye(gray, eye_tpl, eye_bb);

// Draw bounding rectangle for the eye
cv::rectangle(frame, eye_bb, CV_RGB(0,255,0));
}

// Display video
cv::imshow("video", frame);
}

return 0;
}
/**
*eye-tracking.cpp:
*基于OpenCV的人眼检测与跟踪
*
*该程序试图通过网络摄像头检测和跟踪用户的眼睛。
*启动时,程序执行人脸检测,然后执行眼睛检测
*使用OpenCV的内置Haar级联分类器。如果检测到用户的眼睛
*成功地提取了眼睛模板。此模板将在中使用
*用于跟踪眼睛的后续模板匹配。
*/
#包括
#包括
#包括
cv::级联分类器面_级联;
cv::级联,级联;
/**
*从图像中检测人脸和眼睛的功能。
*
*@param im源图像
*如果检测成功,@param tpl将填充眼睛模板。
*@param rect将被眼睛的边框填充
*@return zero=失败,nonzero=成功
*/
内部检测(cv::Mat&im,cv::Mat&tpl,cv::Rect&Rect)
{
向量脸、眼睛;
面部级联。检测多尺度(im,面部,1.1,2,0 | CV | HAAR | U比例|图像,CV::Size(30,30));
对于(int i=0;iframe;
if(frame.empty())
打破
//水平翻转框架,Windows用户可能需要此选项
cv::翻转(帧,帧,1);
//转换为灰度和
//使用直方图均衡化调整图像对比度
cv::席灰色;
cv::CVT颜色(边框、灰色、cv_bgr2灰色);
如果(眼宽=0和眼高=0)
{
//检测阶段
//尝试检测用户的面部和眼睛
探测眼(灰色、眼tpl、眼bb);
}
其他的
{
//模板匹配跟踪阶段
轨眼(灰色、眼tpl、眼bb);
//为眼睛绘制边框
cv::矩形(框架,眼睛bb,cv_RGB(0255,0));
}
//显示视频
cv::imshow(“视频”,帧);
}
返回0;
}

如果您查看
pkg config--libs--cflags opencv
的输出,您将看到它为您设置了链接并包含行。您不需要放置
-l
-I

pkg config--libs
输出库的链接参数


pkg config--cflags
输出include参数和任何其他需要的编译标志。

好的,似乎g++不需要我在命令
pkg config--libs opencv
之前加上“-l”参数。编译工作正常。