Giúp khắc phục lỗi khi chạy chương trình C++ với OpenCV

Chào cả nhà, mình đang viết một chương trình đồng hồ nhắc nhở, cứ đến 1 giờ nào đó lại đưa ra một nhắc nhở tương ứng, tuy nhiên bị mắc ở đoạn truyền giá trị vào hàm, hàm được mình viết như sau:

int Displaying_Big_End(Mat image, char* window_name, RNG, char* keyWord) {
    Size textsize = getTextSize(keyWord, FONT_HERSHEY_COMPLEX, 3, 5, 0);
    Point org((window_width - textsize.width) / 2, (window_height - textsize.height) / 2);
    int lineType = 8;

    Mat image2;

    for (int i = 0; i < 255; i += 2) {
        image2 = image - Scalar::all(i);
        putText(image2, keyWord, org, FONT_HERSHEY_COMPLEX, 3,
                Scalar(i, i, 255), 5, lineType);

        imshow(window_name, image2);
        if (waitKey(DELAY) >= 0) {
            return -1;
        }
    }
    return 0;
}

Trong đó window_namekeyWord cùng một kiểu. Khi gọi đến hàm mình gọi như thế này:

int notice(void) {
    int c;

    char keyString[] = "Lunch!";
    /// Start creating a window
    char window_name[] = "WARNING!!!";

    /// Also create a random object (RNG)
    RNG rng(0xFFFFFFFF);

    /// Initialize a matrix filled with zeros
    Mat image = Mat::zeros(window_height, window_width, CV_8UC3);
    /// Show it in a window during DELAY ms
    imshow(window_name, image);
    waitKey(DELAY);
    /// Displaying the big end!
    c = Displaying_Big_End(image, window_name, rng, keyString);
    if (c != 0) return 0;

    waitKey(0);
    return 0;
}

Thì không hiểu sao VS lại báo lỗi:

error C2660: ‘Displaying_Big_End’ : function does not take 4 arguments

Chương trình này sử dụng OpenCV và các kiểu dữ liệu với các hàm của OpenCV là hoàn toàn hợp lệ.

Rõ ràng window_namekeyWord cùng 1 kiểu trong mọi tình huống và nếu bỏ keyWord đi mọi thứ vẫn chạy ngon lành@@. Mong được mọi người giúp đỡ ạ :fearful:

Thêm dòng prototype ngay trước hàm notice xem.

int Displaying_Big_End(Mat image, char* window_name, RNG, char* keyWord);
int notice(void) {

Có khi hàm notice nó không biết được cấu trúc của hàm Displaying_Big_End có 4 tham số. Mà nó đang gọi tới một hàm nào đó cũng có tên Displaying_Big_End, mà hàm này chỉ có 3 tham số.


P/S: Google một phát ra ngay, hàm Displaying_Big_End mặc định của OpenCV chỉ có 3 tham số.

http://docs.opencv.org/trunk/doc/tutorials/core/random_generator_and_text/random_generator_and_text.html

Nếu vậy thì @World_Class coi lại code của mình đi. Hàm có 3 tham số và hàm có 4 tham số là 2 hàm khác nhau rồi.

P/S2: Mà @World_Class đặt câu hỏi rất rõ ràng, cụ thể, có nói rõ các giải pháp. Đạt rất thích câu hỏi dạng này. :+1:

2 Likes

Bingo!!! Cảm ơn anh Đạt siêu siêu nhiều :smiley: :smiley: :smiley:. Hàm notice em để trước Display_Big_End, Hàm main em để cuối cùng mới gọi notice vậy mà cũng cần để prototype Display_Big_End trước nữa, em sẽ để ý nhiều hơn :blush:

Display_Big_End không phải là hàm chuẩn của OpenCV anh ạ :smile:, nó là 1 ví dụ của OpenCV nên em lấy vào dùng cho chương trình cảnh báo của mình thôi ạ ^^, cải biến bằng cách thêm tham số truyền vào xâu kí tự muốn cảnh báo thôi ạ :smiley:.

Kinh nghiệm phiêu lưu không biết bao nhiêu diễn đàn và chức to nhất từng làm là SuperMod chứ không phải dạng vừa đâu ạ :wink:
Đùa 1 tí chứ thực ra cũng học ở các bài của anh 1 phần đấy ạ :smile:

1 Like

À, ra thế, anh cũng nghi nghi, tại cái tên hàm trông kỳ cục quá. Thường tên hàm của C++ sẽ ở dạng camel.

tenHamTheNay
HoacTenTheNay

Chứ không ở dạng

Cui_Bap_The_Nay

C thì có dạng

thich_the_nay_co

Wow, hứa hẹn đây. Anh sẽ cố gắng xây dựng DNH thật tốt để giữ chân em lại cho tới ngày em lên Moderator nhé. DNH chỉ có Moderator thôi :smile:

1 Like

Chuẩn quá anh ạ, em cũng mới làm việc với OpenCV thôi, mà thực ra là mới với C++ luôn, lúc trước chỉ biết C, còn thực tế là đầu tư và xác định làm với Java, nhưng cái duyên vs C++ đến nên đang đau đầu với nó anh ạ :smile:

Thực ra với việc lập trình em chả có tài cán gì, em được cái nhiều ý tưởng và dám nói ra nên m.người tưởng khủng lắm, thực ra là cứ liều mà làm thôi anh ạ :smile:, em tự thấy mình tốt ở khả năng làm lãnh đạo, quản lý hơn ^^.
Ngay lúc anh ra cái video nói về DNH (mà so sánh vs FB và voz ấy), có mail gửi về em đã chúc DNH sớm trở thành stackoverflow của VN , cứ đà này việc đó trong tầm tay thôi ạ!
Em thì lúc nào cũng sẽ ủng hộ DNH hết sức, vì trước đó muốn có 1 sân chơi (sân học thì đúng hơn ^^) để sinh hoạt mà không có, mấy forum tiếng Anh tốt nhưng mình chưa siêu tiếng Anh đến thế@@, chả biết sao tự dưng tìm tài liệu C++ để học, tìm được đống video của anh trên Youtube, vào profile của anh ms biết đến DNH này, vài ngày tham gia thì thấy đúng chỗ mình cần tìm rồi! So với bao nhiêu cao thủ trên này em còn phải học nhiều nhiều lắm :smiley:

1 Like

Hehe, thấy em nói vậy anh rất vui. Có lẽ topic này đã giải quyết được vấn đề ban đầu của nó, anh để nó tự động close sau 1h nhé.

1 Like

This topic was automatically closed after 60 minutes. New replies are no longer allowed.

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