{"id":27617,"library":"blind-watermark","title":"Blind Watermark","description":"A Python library for embedding and extracting blind digital watermarks in images using DWT-DCT-SVD based algorithm. Current version 0.4.4, released irregularly.","status":"active","version":"0.4.4","language":"python","source_language":"en","source_url":"https://github.com/guofei9987/blind_watermark","tags":["watermark","image","steganography","DWT","DCT","SVD"],"install":[{"cmd":"pip install blind-watermark","lang":"bash","label":"Latest stable"}],"dependencies":[{"reason":"Array operations","package":"numpy","optional":false},{"reason":"Image I/O and processing","package":"opencv-python","optional":false},{"reason":"DWT wavelet transform","package":"pywt","optional":false},{"reason":"Visualization in examples","package":"matplotlib","optional":true}],"imports":[{"note":"Main class is WaterMark, not the package name","wrong":"from blind_watermark import blind_watermark","symbol":"WaterMark","correct":"from blind_watermark import WaterMark"},{"note":"No standalone function; use WaterMark instance methods","wrong":"from blind_watermark import embed_watermark","symbol":"embed_watermark","correct":"from blind_watermark import WaterMark\nbwm = WaterMark()\nbwm.read_img('original.png')\nbwm.read_wm('watermark.png')\nbwm.embed('output.png')"}],"quickstart":{"code":"from blind_watermark import WaterMark\n\nbwm = WaterMark()\nbwm.read_img('original.png')\nbwm.read_wm('watermark.png')\nbwm.embed('output.png')\n\nbwm2 = WaterMark()\nwm_extract = bwm2.extract('output.png', 'extracted_watermark.png')\nprint('Watermark extracted successfully')","lang":"python","description":"Embed a watermark image into a host image, then extract it."},"warnings":[{"fix":"Create a new WaterMark() instance for each embed/extract operation.","message":"The library modifies the image in-place during embed; do not reuse the WaterMark object after embedding without re-reading images.","severity":"gotcha","affected_versions":">=0.2.0"},{"fix":"Use embed with a file path; if you need array, use embed(..., output_file_name=None) (check docs).","message":"Method 'embed' returns None, not the watermarked image array. Use 'embed' to save to file; later versions may add return value.","severity":"deprecated","affected_versions":"0.x"},{"fix":"Ensure watermark dimensions are smaller than host; typical max ratio 1/4.","message":"read_wm expects a file path or a watermark image path; if the watermark image is too large relative to host, embedding may fail silently.","severity":"gotcha","affected_versions":">=0.2.0"}],"env_vars":null,"last_verified":"2026-05-09T00:00:00.000Z","next_check":"2026-08-07T00:00:00.000Z","problems":[{"fix":"pip install blind-watermark and import as from blind_watermark import WaterMark","cause":"Package name is blind-watermark, but import is blind_watermark.","error":"ModuleNotFoundError: No module named 'blind_watermark'"},{"fix":"Upgrade to latest: pip install --upgrade blind-watermark","cause":"Using outdated version <0.2.0 which had different API (e.g., bwm = BlindWatermark()).","error":"AttributeError: 'WaterMark' object has no attribute 'read_img'"}],"ecosystem":"pypi","meta_description":null,"install_score":null,"install_tag":null,"quickstart_score":null,"quickstart_tag":null}