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.

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ý.

1 Like

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 :slight_smile:

83% thành viên diễn đàn không hỏi bài tập, còn bạn thì sao?