Open-CV - Nicht korrekt geladen wird

Ich bin mit Ubuntu 14.04 und ich versuche, um diesen code zu kompilieren, aber ich bekomme diese Fehler, egal was, ich glaube, es hat etwas zu tun mit der Einbeziehung der OpenCV-Bibliothek, aber ich bin mir nicht sicher. Könnte jemand mir helfen?
Fehler:

main.cc:66:37: Fehler: "CV_RETR_EXTERNAL' wurde nicht deklariert, in diesem Umfang

main.cc:66:55: Fehler: "CV_CHAIN_APPROX_NONE' wurde nicht deklariert, in diesem Umfang

main.cc:81:28: Fehler: "CV_BGR2GRAY' wurde nicht deklariert, in diesem Umfang

Den Code(sorry für die Formatierung, ich bekomme einfach nicht das richtige):

#include <opencv2/imgproc.hpp>
#include <opencv2/highgui/highgui.hpp>
#include <tesseract/baseapi.h>
#include <iostream>
void rgb2cmyk(cv::Mat& src, std::vector<cv::Mat>& cmyk)
{
CV_Assert(src.type() == CV_8UC3);

cmyk.clear();
for (int i = 0; i < 4; ++i)
    cmyk.push_back(cv::Mat(src.size(), CV_32F));

for (int i = 0; i < src.rows; ++i)
{
    for (int j = 0; j < src.cols; ++j)
    {
        cv::Vec3b p = src.at<cv::Vec3b>(i,j);

        float r = p[2] / 255.;
        float g = p[1] / 255.;
        float b = p[0] / 255.;
        float k = (1 - std::max(std::max(r,g),b));

        cmyk[0].at<float>(i,j) = (1 - r - k) / (1 - k); 
        cmyk[1].at<float>(i,j) = (1 - g - k) / (1 - k);
        cmyk[2].at<float>(i,j) = (1 - b - k) / (1 - k);
        cmyk[3].at<float>(i,j) = k;
    }
}
}

int main()
{
cv::Mat im0 = cv::imread("scratchcard.png");
if (!im0.data)
    return -1;

std::vector<cv::Mat> cmyk;
rgb2cmyk(im0, cmyk);

cv::Mat im1;
im1 = cmyk[3].mul(1 - cmyk[1]) > 0.25;

cv::Mat im2;
im1.convertTo(im2, CV_8U);

std::vector<std::vector<cv::Point> > contours;
cv::findContours(im2, contours, CV_RETR_EXTERNAL, CV_CHAIN_APPROX_NONE);

double max_area = 0;
int max_idx = 0;
for (int i = 0; i < contours.size(); i++)
{
    double area = cv::contourArea(contours[i]);
    max_idx  = area > max_area ? i : max_idx;
    max_area = area > max_area ? area : max_area;
}

im2.setTo(cv::Scalar(0));
cv::drawContours(im2, contours, max_idx, cv::Scalar(255), -1);

cv::Mat im3;
cv::cvtColor(im0, im3, CV_BGR2GRAY);
im3 = ((255 - im3) & im2) > 200;

cv::Mat dst = im3.clone();
cv::findContours(dst.clone(), contours, CV_RETR_EXTERNAL, CV_CHAIN_APPROX_NONE);
for (int i = 0; i < contours.size(); i++)
{
    if (cv::contourArea(contours[i]) < 100)
        cv::drawContours(dst, contours, i, cv::Scalar(0), -1);
}

tesseract::TessBaseAPI tess;
tess.Init(NULL, "eng", tesseract::OEM_DEFAULT);
tess.SetVariable("tessedit_char_whitelist", "0123456789");
tess.SetPageSegMode(tesseract::PSM_SINGLE_BLOCK);
tess.SetImage((uchar*)dst.data, dst.cols, dst.rows, 1, dst.cols);

char* out = tess.GetUTF8Text();
std::cout << out << std::endl;

cv::imshow("src", im0);
cv::imshow("dst", dst);
cv::waitKey();
return 0;
}

UPDATE: CV_RETR_EXTERNAL und CV_CHAIN_APPROX_NONE Fehler wurden behoben, durch die Verwendung von cv::"was auch immer".
Allerdings CV_BGR2GRAY Fehler weiterhin bestehen, falls cv::COLOR_BGR2GRAY der gesamte code wird hervorgehoben, wie buggy. Hat jemand eine Ahnung?

  • Haben Sie versucht,:: CV_RETR_EXTERNAL statt CV_RETR_EXTERNAL?
  • Welche version von OpenCV verwenden Sie? CV_RETR_EXTERNAL ist aus der C-API, so könnte es nicht existieren. Versuchen cv::RETR_EXTERNAL statt-sollte es existieren, wenn Sie Ihre Einrichtung korrekt ist.
  • Arelius und ypnos, ich' mit der neuesten OpenCV-version (2.4.9 wenn ich mich nicht falsch). Ich werde testen Sie Ihre Lösungen so schnell ist, bekomme ich auf meinem Ubuntu-pc.
  • Mit cv::RETR_EXTERNAL fester Teil von ihm, ich bekomme immer noch main.cc:82:27: error: ‘BGR2GRAY’ is not a member of ‘cv’
Schreibe einen Kommentar