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’
Du musst angemeldet sein, um einen Kommentar abzugeben.
scheint es, sind Sie (versehentlich) mit dem 3,0(master), opencv Zweig.
viele Konstanten haben sich geändert es, wie die meisten der CV_ Präfixe geändert wurden, um cv:: namespace, der
CV_BGR2GRAY ist nun cv::COLOR_BGR2GRAY, etc.
auch alle Modul-Header ging man, wie opencv2/imgproc.hpp .
wenn du den code aus dem github-repo, und zu dem 2.4.9 Niederlassung statt,
(in der opencv-Ordner) bringt Sie hin. ofc werden Sie erneut cmake und neu kompilieren
Verwenden
COLOR_RGB2GRAY
eher alsCOLOR_BGR2GRAY
. Es funktionierte für mich, aber ich bin mit OpenCV 3.0. Sie können die Nutzungcv::COLOR_RGB2GRAY
wie die anderen empfohlen, wenn Sie unter 2.4.