- 一分完成浮水印(Blending Function)
- 實作參考與連結
- 一句後洗洗睡
一分完成浮水印(Blending Function)
一樣用本魯蛇照,廢話不多說。
(3... 2... 1... 0)
(浮水印位於身體中央處,Done)
Blending Function程式碼講解
Mat watermark = imread("watermarkimage.png") Mat img = imread("yourimage.jpg"); //assuming the watermark has same number of channel and size as your_image Mat watermarked = (0.8 * img) + (0.2 * watermark)
只要你的watermarkimage.png與原圖一樣Size,上面Code就秒解。
你可以設計好watermark,然後複製貼到跟原圖一樣大的黑底圖裡,小畫家萬能。
只是這樣太無聊了,下面做改進。
微改進:使用者可移動浮水印位置,再輸出圖片
// Control panel to choose condition range namedWindow( "Control panel", CV_WINDOW_AUTOSIZE ); int mark_x = 207; // 預設值, 可以自行調整, 注意, 這邊沒有錯誤處理, 有問題請設成0 createTrackbar("Watermark Position LeftUp X", "Control panel", &mark_x, iWidthSrc - iWidthMark); int mark_y = 530; createTrackbar("Watermark Position LeftUp Y", "Control panel", &mark_y, iHiehgtSrc - iHiehgtMark); while (true) { // Initial PaddingMark for user Mat imgPaddingMark =Mat::zeros(imgOriginal.size(),imgOriginal.type()); int stepPadd = imgPaddingMark.step; int iChannelPadd = imgPaddingMark.channels(); uchar* dataPadd = imgPaddingMark.data + mark_y*stepPadd + mark_x*iChannelPadd; // Processing Watermark dataMark = imgWatermark.data; for (int y = 0; y < iHiehgtMark; ++y, dataMark += stepMark, dataPadd += stepPadd) { uchar* mark_data = dataMark; uchar* padd_data = dataPadd; for (int x = 0; x < iWidthMark; ++x, mark_data += iChannelMark, padd_data += iChannelPadd) { // Set watermark to special position *(padd_data + 2) = *(mark_data + 2); *(padd_data + 1) = *(mark_data + 1); *(padd_data) = *(mark_data); } } Mat imgMarkOrigin = (0.8 * imgOriginal) + (0.2 * imgPaddingMark); imshow( titleMarkOrigin, imgMarkOrigin); int iRet = waitKey(30); // wait for 30 seconds if ( iRet == 27 ) { //press ESC to exit program imwrite( "mark_done.jpg", imgMarkOrigin ); break; } }
作法很簡單,用一個Control Panel,控制浮水印的左上角座落位置,
可即時看到浮水印位置的變動結果,方便放到中意的地方。
Loop做的就是根據Panel參數,把原本的Watermark,放到與原圖同Size的Padding區域裡,
之後就一樣,同樣Size的Blending function解決~。
另外,按ESC離開後,會自動儲存結果mark_done.jpg到目錄下。
以下秀點成果:
(縱使在手臂也清楚可見,不干擾)
(在右上角的牆壁與深色壁櫥也No Problem!)
(充當馬賽克屏蔽喔喔喔喔喔喔喔)
實作參考 與 連結
程式碼實作參考
- 最下面的回答 How do I add a watermark to an image?
- OpenCV官網理論教學 Adding (blending) two images using OpenCV
一句後洗洗睡
雖然瞬解有點空虛,不過移動浮水印還是小確幸,謝天謝地,趕著去做其他期末專案了!
Hard Rock Casino and Resort – Dr.D.C.
回覆刪除Hard 제주 출장샵 Rock Hotel and Casino. 3131 South 경주 출장샵 Flamingo Drive, Las Vegas, NV 89109. 안성 출장샵 Phone: (702) 광주광역 출장마사지 321-7263. Casino. 상주 출장샵 More information. Hours, Accepts Credit Cards, Accepts