2014-09-21 5 views
3

Est-il possible d'utiliser la méthode putText() pour dessiner un texte sur une image en diagonale? Sinon, en plus d'utiliser addWeighted() pour fusionner deux images ensemble (où l'un d'entre eux est un texte placé en diagonale), y a-t-il une autre option?en utilisant putText() en diagonale? Utilisation d'OpenCV

J'essaie de placer un filigrane de texte sur une image, mon problème est que pour le moment j'utilise addWeighted() pour mélanger un texte dessiné en diagonale sur un fond blanc. Même avec alpha 0.9, le fond blanc change l'image originale. J'utilise OpenCV 2.4.9 avec VC10. La méthode putText() fait partie de la bibliothèque CORE sur OpenCV.

Des idées?

Merci,

Alex

+0

Vous avez pas donné nous tout contexte du tout. De quelle bibliothèque est membre 'putText'? – Dai

+0

@Dai, une partie de l'API d'opencv. (module de base en 2.4.9) – berak

+0

Vous pouvez utiliser putText dans une image vide, puis la faire pivoter en diagonale, et enfin l'ajouter à votre image originale. – sergioFC

Répondre

7

Jetez un oeil à cet exemple en utilisant l'idée de mon commentaire:

#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; 
} 

Résultat:

lenna Wattermark

+0

Génial. Regarde bien et fait ce que je devais. [Pouce en l'air] – user1003302

Questions connexes