不能在安卓原生 c++ 中使用自定义类对象的向量
Can't use vector of custom class objects in android native c++
我正在使用Opencv和android Ndk开发一个图像处理应用程序。首先,我在visual studio中编写代码,没有任何问题。我有标题roi.hpp和roi.cpp:roi.hpp:
#ifndef ROI
#define ROI
#include <....imgproc.hpp>
#include <....opencv.hpp>
using namespace cv;
class My_ROI{
public:
My_ROI();
My_ROI(const My_ROI &my_roi);
My_ROI(Point upper_corner, Point lower_corner,Mat src);
Point upper_corner, lower_corner;
Mat roi_ptr;
Scalar color;
int border_thickness;
void draw_rectangle(Mat src);
};
#endif
roi.cpp:
#include "myImage.hpp"
#include <....imgproc.hpp>
#include <....opencv.hpp>
#include <....highgui.hpp>
#include <stdio.h>
#include <stdlib.h>
#include <string>
#include "roi.hpp"
using namespace cv;
using namespace std;
My_ROI::My_ROI(const My_ROI &my_roi)
{
int i;
// allocate variables
My_ROI();
// copy values
operator = (my_roi);
}
My_ROI::My_ROI(){
upper_corner=Point(0,0);
lower_corner=Point(0,0);
}
My_ROI::My_ROI(Point u_corner, Point l_corner, Mat src){
upper_corner=u_corner;
lower_corner=l_corner;
color=Scalar(0,255,0);
border_thickness=2;
roi_ptr=src(Rect(u_corner.x, u_corner.y, l_corner.x- u_corner.x,l_corner.y- u_corner.y));
}
void My_ROI::draw_rectangle(Mat src){
rectangle(src,upper_corner,lower_corner,color,border_thickness);
}
和在另一个类我做了一个向量的My_ROI和使用它没有问题,像这样:
vector <My_ROI> roi;
for (int j = 0; j<NSAMPLES; j++){
roi[j].draw_rectangle(m->src);
}
然后我将我的项目移植到android,我使用roi.hpp和roi.cpp作为外部c++文件,这是我的android.mk:
LOCAL_PATH := $(call my-dir)
include $(CLEAR_VARS)
OPENCV_CAMERA_MODULES := on
OPENCV_INSTALL_MODULES := on
OPENCV_LIB_TYPE:=STATIC
include ../../jni/OpenCV.mk
LOCAL_MODULE := hello-jni
LOCAL_SRC_FILES := hello-jni.cpp
LOCAL_SRC_FILES += ../../external_cpp/makegray.cpp
LOCAL_SRC_FILES += ../../external_cpp/roi.cpp
LOCAL_C_INCLUDES += $(LOCAL_PATH)/../../external_cpp
LOCAL_LDLIBS += -llog -ldl
include $(BUILD_SHARED_LIBRARY)
application.mk:
APP_STL := gnustl_static
APP_CPPFLAGS := -frtti -fexceptions
APP_ABI := armeabi-v7a
APP_PLATFORM := android-8
最后在hello-jni。cpp文件中我想使用roi向量:
#include <jni.h>
#include <opencv2/highgui/highgui.hpp>
#include <opencv2/imgproc/imgproc.hpp>
#include <android/log.h>
#include <stdio.h>
#include <stdlib.h>
#include <iostream>
#include <string>
#include <vector>
#include <cmath>
#include <opencv2/opencv.hpp>
#include "../../external_cpp/roi.hpp"
vector <My_ROI> roi;
void fillROIArray(MyImage *m,Mat& mRgb,Mat& mGray)
{
m->src=mRgb;
flip(m->src,m->src,1);//reverse the order of rows or cols in a matrix
// My_ROI *f1 = new My_ROI;
// roi.push_back(*f1);
roi.push_back(My_ROI(Point(m->src.cols/3, m->src.rows/6),Point(m->src.cols/3+square_len,m->src.rows/6+square_len),m->src));
roi.push_back(My_ROI(Point(m->src.cols/4, m->src.rows/2),Point(m->src.cols/4+square_len,m->src.rows/2+square_len),m->src));
roi.push_back(My_ROI(Point(m->src.cols/3, m->src.rows/1.5),Point(m->src.cols/3+square_len,m->src.rows/1.5+square_len),m->src));
roi.push_back(My_ROI(Point(m->src.cols/2, m->src.rows/2),Point(m->src.cols/2+square_len,m->src.rows/2+square_len),m->src));
roi.push_back(My_ROI(Point(m->src.cols/2.5, m->src.rows/2.5),Point(m->src.cols/2.5+square_len,m->src.rows/2.5+square_len),m->src));
roi.push_back(My_ROI(Point(m->src.cols/2, m->src.rows/1.5),Point(m- >src.cols/2+square_len,m->src.rows/1.5+square_len),m->src));
roi.push_back(My_ROI(Point(m->src.cols/2.5, m->src.rows/1.8),Point(m->src.cols/2.5+square_len,m->src.rows/1.8+square_len),m->src));
mGray=m->src;
}
void myMethod(Image &m)
{
for (int j = 0; j<NSAMPLES; j++){
roi[j].draw_rectangle(m->src);
}
}
但是出现错误:
method draw_rectangle(...) couldn't be resolved!
我可以访问我的roi对象的所有成员,但当我使这个类的向量,我不能访问它的成员!我搜索了很多关于自定义类的矢量,这是几天我正在努力解决这个问题,但我不能。
任何帮助真的很感激。问候。
最后我找到了解决办法…也许这对其他人有用。我可以像这样访问vector的成员:
for (int j = 0; j<NSAMPLES; j++){
((My_ROI)roi[j]).draw_rectangle(m->src);
}
我现在可以从任何自定义类访问任何向量的对象!:)
相关文章:
- 自定义对象的dlib序列化在gcc中失败
- 如何将带有自定义对象的容器从C++传递到QML
- 如何使用Q_PROPERTY公开自定义对象列表
- 如何在自定义对象的<<运算符中添加自定义前缀
- 将自定义对象作为参数从目标 C 传递到 C++
- 使用自定义对象声明shared_ptr数组时出现错误 C2664
- 在具有自定义对象的集合中查找值
- std::set 不会检测到重复的自定义对象
- 如何使用自定义对象的序列化在 c++ 中编写自定义二进制文件处理程序
- std::排序为排序自定义对象时出现的向量引发错误
- 具有自定义对象的C 优先级队列
- 自定义对象构造函数在循环外部循环
- 带有自定义对象的C 范围循环
- 如何正确地将规则 5(或零?)应用于包含带有字符串的自定义对象向量的类
- 如何在包含自定义对象的容器中使用分区函数C++
- 如何在具有多个成员的自定义对象的向量上使用查找
- std::vector 如何支持未知大小的自定义对象的连续内存
- 将指针的QVECTOR分类到自定义对象
- (C )正在创建专门用于处理所有其他自定义对象的类/对象一种处理项目的正确方法
- C soci查询到自定义对象的向量