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é tập Code viết 22:37 ngày 30/09/2018

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

Cao Xuân Ngọc viết 22:33 ngày 30/09/2018

Cú pháp*(Mat*)addrGray có ý nghĩa như thế nào ạ?

Bé tập Code viết 22:29 ngày 30/09/2018

Cast kiểu trước rồi mới truyền bạn.

Cao Xuân Ngọc viết 22:29 ngày 30/09/2018

Vậy thì ở đây addrGray nó là một pointer phải ko ạ?

Bé tập Code viết 22:39 ngày 30/09/2018

Không, jlong sao lại là pointer nhỉ. addrGray đầu tiên bị cast về Mat*, sau đó được dereference ra thôi

Bài liên quan
0