30/09/2018, 16:28

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 đỡ ạ

Nguyễn Minh Dũng viết 18:39 ngày 30/09/2018

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.

Mr. July viết 18:35 ngày 30/09/2018

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

Bingo!!! Cảm ơn anh Đạt siêu siêu nhiều . 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

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.

Display_Big_End không phải là hàm chuẩn của OpenCV anh ạ , 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 ạ .

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.

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 ạ
Đùa 1 tí chứ thực ra cũng học ở các bài của anh 1 phần đấy ạ

Nguyễn Minh Dũng viết 18:43 ngày 30/09/2018

Display_Big_End không phải là hàm chuẩn của OpenCV anh ạ

À, 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

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 ạ

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

Mr. July viết 18:29 ngày 30/09/2018

À, 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

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 ạ

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

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 ạ , 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ề diễn đàn (mà so sánh vs FB và voz ấy), có mail gửi về em đã chúc diễn đàn 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ộ diễn đàn 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 diễn đàn 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

Nguyễn Minh Dũng viết 18:39 ngày 30/09/2018

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

Nguyễn Minh Dũng viết 18:43 ngày 30/09/2018

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

Bài liên quan
0