使用cv :: Mat类型时如何在图像上叠加文本

Ara*_*ras 25 c++ opencv computer-vision

我正在使用opencv 2.1.在我的代码中,我有几个图像存储为Mat对象初始化如下:

Mat img1 = imread("img/stuff.pgm", CV_LOAD_IMAGE_GRAYSCALE);
Run Code Online (Sandbox Code Playgroud)

在矩阵运算完成后,我可以使用imshow()正确显示它们.现在我想在图像上添加一些文字来描述发生了什么.看看文档似乎就是cvPutText()我需要的功能.但是,当我尝试这样的事情时:

cvPutText(result, "Differencing the two images.", cvPoint(30,30), &font, GREEN);

我得到以下编译错误: error: cannot convert ‘cv::Mat’ to ‘CvArr*’ for argument ‘1’ to ‘void cvPutText(CvArr*, const char*, CvPoint, const CvFont*, CvScalar)’

在显示此图像时,我需要做些什么才能添加一些文字?

Ara*_*ras 61

我在看错了地方.我在cpp的较新的OpenCV文档中找到了答案.有一个名为putText()的新函数接受cv :: Mat对象.所以我尝试了这一行并且它有效:

putText(result, "Differencing the two images.", cvPoint(30,30), 
    FONT_HERSHEY_COMPLEX_SMALL, 0.8, cvScalar(200,200,250), 1, CV_AA);
Run Code Online (Sandbox Code Playgroud)

希望这有助于某人.


Sta*_*mes 22

对于C++基本用法:

cv::putText(yourImageMat, 
            "Here is some text",
            cv::Point(5,5), // Coordinates
            cv::FONT_HERSHEY_COMPLEX_SMALL, // Font
            1.0, // Scale. 2.0 = 2x bigger
            cv::Scalar(255,255,255), // BGR Color
            1, // Line Thickness (Optional)
            cv::CV_AA); // Anti-alias (Optional)
Run Code Online (Sandbox Code Playgroud)

请参阅OpenCV文档中的putText().


Bil*_*eed 8

putText(result, "Differencing the two images.", cvPoint(30,30), 
    FONT_HERSHEY_COMPLEX_SMALL, 0.8, cvScalar(200,200,250), 1, CV_AA);
Run Code Online (Sandbox Code Playgroud)

在上面的行中,"result"应该是cvArr*或IplImage*.但是从这里提供的代码中,我猜你传递了一个cv :: Mat对象.因此,您需要使用cvarrToMat()转换它,或者传递&result而不是result.

希望能帮助到你