为什么此OpenCV代码是通过Terminal而不是Xcode编译的?

时间:2019-06-20 07:32:59

标签: c++ xcode opencv

尝试为我的Mac设置(C ++)OpenCV。我想使用Xcode,因为根据本文,可能-https://medium.com/@jaskaranvirdi/setting-up-opencv-and-c-development-environment-in-xcode-b6027728003

我的问题是以下代码可以通过以下命令通过Terminal完美编译:

g++ $(pkg-config --cflags --libs /usr/local/Cellar/opencv/4.1.0_2/lib/pkgconfig/opencv4.pc) -std=c++11  /Users/hordon/Downloads/OpenCVExample_cpp.cpp -o project_test

但是当我尝试通过Xcode运行完全相同的代码时,构建失败并出现10个未定义的错误:“某物”(例如cv :: Mat :: deallocate(),cv :: Mat :: create等)错误消息如图所示。我对Xcode完全陌生,我不知道可能是什么问题。我也对这种消息背后的理论感兴趣-两者之间有什么区别?链接器,编译器?

#include <iostream>
#include <opencv2/core.hpp>
#include <opencv2/highgui.hpp>
#include <opencv2/imgproc.hpp>

cv::Mat image;

void myMouseCallback(int event, int x, int y, int flags, void* userdata)
{
    if (flags & cv::MouseEventFlags::EVENT_FLAG_LBUTTON) {
        if (flags & cv::MouseEventFlags::EVENT_FLAG_SHIFTKEY) {
            cv::rectangle(image, { x,y }, { y, x }, CV_RGB(255, (x*y) % 255, (x + y) % 255));
        } else if (flags &cv::MouseEventFlags::EVENT_FLAG_ALTKEY) {
            cv::line(image, { x, y }, { y, x }, CV_RGB((y * x) % 255, (int)(sin((double)x / image.cols) * 255), (x * y * x - y) % 255));
        } else {
            cv::circle(image, { x,y }, (x + y) % 10, 0);
        }
    }

    cv::imshow("Ablak", image);
}

int main()
{
    image = cv::imread("/Users/hordon/Downloads/csillam.jpg");

    cv::Mat greyScale(image.rows, image.cols, CV_8UC1);
    for (int i = 0; i < greyScale.rows; ++i) {
        for (int j = 0; j < greyScale.cols; j++) {
            cv::Vec3b pixel = image.at<cv::Vec3b>(i, j);

            greyScale.at<uint8_t>(i, j) = (pixel[0] + pixel[1] + pixel[2]) / 3;
        }
    }
    cv::imshow("Greyscale", greyScale);

    cv::imshow("Ablak", image);
    cv::setMouseCallback("Ablak", myMouseCallback);

    cv::waitKey(0);
}

0 个答案:

没有答案