У меня есть код C++ OpenCV в моей папке jni приложения Android hello-jni.cpp
. Я просто хочу найти и нарисовать convexhull, но причина hull[i]
метод convexhull генерирует ошибку «недопустимые аргументы». Если я бросаю (vector<point>(hull[i]))
программа работает и генерирует сообщение об ошибке:Недопустимые аргументы в ConvexHull Android ndk и Opencv
libc "Fatal signal 11 (SIGSEGV) at 0x00000004 (code=1)"
Любая помощь действительно очень ценится.
#include <jni.h>
#include <opencv2/core/core.hpp>
#include <opencv2/highgui/highgui.hpp>
#include <opencv2/imgproc/imgproc.hpp>
#include <android/log.h>
#include <opencv/cv.h>
#include <vector>
#include <cmath>
#include <opencv2/opencv.hpp>
#include <string.h>
#include <stdio.h>
#include <stdlib.h>
#define LOG_TAG "hellojni"
#define LOGI(...) __android_log_print(ANDROID_LOG_INFO,LOG_TAG,__VA_ARGS__)
#define LOGE(...) __android_log_print(ANDROID_LOG_ERROR,LOG_TAG,__VA_ARGS__)
#define ORIGCOL2ANDROIDORGCOL CV_BGR2BGRA
using namespace std;
using namespace cv;
extern "C" {
JNIEXPORT jint JNICALL Java_com_elmira_getconvexhull_MainActivity_convertNativeGray(
JNIEnv*, jobject, jlong addrRgba, jlong addrGray);
JNIEXPORT jint JNICALL Java_com_elmira_getconvexhull_MainActivity_convertNativeGray(
JNIEnv*, jobject, jlong addrRgba, jlong addrGray) {
Mat& mRgb = *(Mat*)addrRgba;
Mat& mGray = *(Mat*)addrGray;
int conv = 0;
jint retVal;
Mat src; Mat src_gray;
src = mRgb;
cvtColor(src, src_gray, CV_BGR2GRAY);
blur(src_gray, src_gray, Size(3, 3));
Mat src_copy = src.clone();
Mat threshold_output;
vector<vector<Point> > contours;
vector<vector<Point> > hull(contours.size());
vector<Vec4i> hierarchy;
int thresh = 100;
threshold(src_gray, threshold_output, thresh, 255, THRESH_BINARY || CV_THRESH_OTSU);
/// Find contours
findContours(threshold_output, contours, hierarchy, CV_RETR_TREE, CV_CHAIN_APPROX_SIMPLE, Point(0, 0));
__android_log_print(ANDROID_LOG_INFO, "inmethod", "size %d *** %d", contours.size(), threshold_output.cols);
for (int i = 0; i < contours.size(); i++)
{
convexHull(Mat(contours[i]), hull[i], false, false);
}
retVal = (jint)conv;
return retVal;
}
}
спасибо за вашу response сделала то, что вы сказали, но теперь программа запускается и генерирует эту ошибку: Ошибка OpenCV: утверждение не выполнено (! fixedSize() || len == ((vector *) v) -> size()/esz) в вирту al void cv :: _ OutputArray :: create (int, int const *, int, int, bool, int) const, file/hdd2/buildbot/slaves/slave_ardbeg1/50-SDK/opencv/modules/core/src/matrix. cpp, строка 1489 –
@ elnaz.bfrhn работает нормально для меня. Где ваша ошибка? – Miki
точно в этой линии выпуклыйHull (мат (контуры [i]), (вектор (корпус [i]))); –