30/09/2018, 20:25
Hỏi về Mat trong OpenCV
Chào mọi người ạ, hiện tại em đang tìm hiểu về OpenCV và có một đoạn code C tham khảo trên mạng như sau:
JNIEXPORT void JNICALL Java_org_opencv_samples_tutorial2_Tutorial2Activity_FindFeatures(
JNIEnv*, jobject, jlong addrGray, jlong addrRgba)
{
Mat& mGr = *(Mat*)addrGray;
Mat& mRgb = *(Mat*)addrRgba;
vector<KeyPoint> v;
FastFeatureDetector detector(50);
detector.detect(mGr, v);
for( unsigned int i = 0; i < v.size(); i++ )
{
const KeyPoint& kp = v[i];
circle(mRgb, Point(kp.pt.x, kp.pt.y), 10, Scalar(255,0,0,255));
}
}
Trong đoạn code có 2 dòng em không hiểu:
Mat& mGr = *(Mat*)addrGray;
Mat& mRgb = *(Mat*)addrRgba;
Có ai biết giải thích giùm em với được không ạ? Em cảm ơn.
Bài liên quan
Mat
(matrix) là một class trong OpenCV chứa các thông tin về ma trận (của ảnh).Hai dòng đó tạo ra 2 matrix để lưu input là ảnh xám và ảnh màu rồi đưa vào xử lý.
Cú pháp
*(Mat*)addrGray
có ý nghĩa như thế nào ạ?Cast kiểu trước rồi mới truyền bạn.
Vậy thì ở đây addrGray nó là một pointer phải ko ạ?
Không,
jlong
sao lại là pointer nhỉ.addrGray
đầu tiên bị cast vềMat*
, sau đó được dereference ra thôi