2014-09-21 1 views
3

Возможно ли использование метода putText() для рисования текста по диагонали?используя putText() по диагонали? Использование OpenCV

Если нет, помимо использования addWeighted() для объединения двух изображений (где один из них представляет собой текст, расположенный по диагонали), есть ли другой вариант?

Я пытаюсь разместить текстовый водяной знак на картинке, моя проблема в том, что прямо сейчас я использую addWeighted() для смешивания текста, нарисованного диагонально на белом фоне. Даже с альфа 0.9 белый фон меняет исходное изображение.

Я использую OpenCV 2.4.9 с VC10. Метод putText() является частью библиотеки CORE на OpenCV.

Любые идеи?

Спасибо,

Alex

+0

Вы не дали нам вообще никакого контекста. В какой библиотеке находится этот 'putText' член? – Dai

+0

@ Дай, часть api opencv's. (основной модуль в 2.4.9) – berak

+0

Вы можете использовать putText на пустом изображении, затем повернуть его по диагонали и, наконец, добавить его к исходному изображению. – sergioFC

ответ

7

Посмотрите на этот пример, используя идею моего комментария:

#include <opencv2/core/core.hpp> 
#include <opencv2/highgui/highgui.hpp> 
#include <opencv2/opencv.hpp> 
#include <iostream> 

using namespace std; 
using namespace cv; 

/** 
* Rotate an image (source: http://opencv-code.com/quick-tips/how-to-rotate-image-in-opencv/) 
*/ 
void rotate(cv::Mat& src, double angle, cv::Mat& dst) 
{ 
    int len = std::max(src.cols, src.rows); 
    cv::Point2f pt(len/2., len/2.); 
    cv::Mat r = cv::getRotationMatrix2D(pt, angle, 1.0); 

    cv::warpAffine(src, dst, r, cv::Size(len, len)); 
} 


int main() { 

    Mat img = imread("lenna.png", CV_LOAD_IMAGE_COLOR); 

    // Create and rotate the text 
    Mat textImg = Mat::zeros(img.rows, img.cols, img.type()); 
    putText(textImg, "stackoverflow", Point(0, img.cols/2), FONT_HERSHEY_SIMPLEX, 2.0,Scalar(20,20,20),2); 
    rotate(textImg, -45, textImg); 

    // Sum the images (add the text to the original img) 
    img= img+textImg; 

    namedWindow("WaterMark", CV_WINDOW_AUTOSIZE); 
    imshow("WaterMark", img); 

    waitKey(0); 
    return 0; 
} 

Результат:

lenna Wattermark

+0

Awesome. Выглядит отлично и делает то, что мне нужно. [палец вверх] – user1003302