注册公司登陆哪个网站,建e网登录,网站建设及规划方案,营业执照网上年检入口如果没有方向 往哪里走都是前方 做自己的光 不需要多亮 曾受过的伤 会长出翅膀 大雨冲刷过的天空会更加明亮 流过泪的眼睛也一样 做自己的光 悄悄的发亮 逆风的方向 更容易飞翔 世界怎样在于你凝视它的目光 那未曾谋面过的远方 或许就在身旁 #x1f3b5…
如果没有方向 往哪里走都是前方 做自己的光 不需要多亮 曾受过的伤 会长出翅膀 大雨冲刷过的天空会更加明亮 流过泪的眼睛也一样 做自己的光 悄悄的发亮 逆风的方向 更容易飞翔 世界怎样在于你凝视它的目光 那未曾谋面过的远方 或许就在身旁 虎妹Huu、承桓《做自己的光》 在图像处理中识别和检测水印是一项重要任务特别是在版权保护和验证领域。本文将介绍如何使用OpenCV和Python库来识别图像中的固定水印即使水印的位置和角度可能不同。我们将使用特征匹配技术来实现这一目标。
安装所需的库
在开始之前请确保你已经安装了必要的Python库
pip install opencv-python numpy代码实现
以下是完整的Python代码展示了如何从文件夹中读取图像增强图像颜色以凸显蓝色并降低黑白灰色的影响然后使用特征匹配技术检测图像中的水印。
import cv2
import numpy as np
import osdef extract_images_from_folder(folder_path):从文件夹中读取所有PNG图像并进行预处理images []filenames []for filename in os.listdir(folder_path):if filename.lower().endswith(.png):image_path os.path.join(folder_path, filename)image cv2.imread(image_path)# 调整图像大小为800x600image cv2.resize(image, (800, 600))enhanced_image enhance_colors(image)images.append(enhanced_image)filenames.append(filename)return images, filenamesdef detect_watermark(image, watermark_template):使用特征匹配检测图像中是否存在水印# 转换为灰度图像gray_image cv2.cvtColor(image, cv2.COLOR_BGR2GRAY)gray_template cv2.cvtColor(watermark_template, cv2.COLOR_BGR2GRAY)# 使用ORB特征检测器orb cv2.ORB_create()# 检测关键点和描述符keypoints1, descriptors1 orb.detectAndCompute(gray_image, None)keypoints2, descriptors2 orb.detectAndCompute(gray_template, None)# 创建BFMatcher对象bf cv2.BFMatcher(cv2.NORM_HAMMING, crossCheckTrue)# 匹配描述符matches bf.match(descriptors1, descriptors2)# 根据匹配距离排序matches sorted(matches, keylambda x: x.distance)# 设定一个距离阈值过滤较好的匹配threshold 70 # 可能需要调整此阈值good_matches [m for m in matches if m.distance threshold]# 检查匹配的数量是否足够if len(good_matches) 80: # 你可以调整这个阈值return True, good_matcheselse:return False, Nonedef enhance_colors(image):增强图像中的其他颜色降低黑、白、灰的影响# 将图像从BGR转换到HSVhsv_image cv2.cvtColor(image, cv2.COLOR_BGR2HSV)# 创建一个掩码选择非黑白灰色区域# 定义黑色、白色和灰色的范围lower_black np.array([0, 0, 0])upper_black np.array([180, 255, 30])lower_white np.array([0, 0, 200])upper_white np.array([180, 30, 255])lower_gray np.array([0, 0, 31])upper_gray np.array([180, 30, 199])# 创建掩码mask_black cv2.inRange(hsv_image, lower_black, upper_black)mask_white cv2.inRange(hsv_image, lower_white, upper_white)mask_gray cv2.inRange(hsv_image, lower_gray, upper_gray)# 合并掩码mask mask_black | mask_white | mask_gray# 反转掩码mask cv2.bitwise_not(mask)# 增强非黑白灰区域的饱和度和亮度hsv_image[:, :, 1] np.where(mask 0, hsv_image[:, :, 1] * 2, hsv_image[:, :, 1]) # 增强饱和度hsv_image[:, :, 2] np.where(mask 0, hsv_image[:, :, 2] * 1.5, hsv_image[:, :, 2]) # 增强亮度# 将图像从HSV转换回BGRenhanced_image cv2.cvtColor(hsv_image, cv2.COLOR_HSV2BGR)return enhanced_imagedef main(folder_path, watermark_image_path):主函数执行从文件夹读取图像并检测水印的流程images, filenames extract_images_from_folder(folder_path)watermark_template cv2.imread(watermark_image_path)for i, image in enumerate(images):has_watermark, good_matches detect_watermark(image, watermark_template)if has_watermark:print(fWatermark detected in image {filenames[i]} with {len(good_matches)} good matches)else:print(fNo watermark detected in image {filenames[i]})if __name__ __main__:folder_path img # 替换为包含PNG文件的文件夹路径watermark_image_path test.jpg # 替换为你的水印图像路径main(folder_path, watermark_image_path)样本案例
水印案例 测试案例 HSV转换之后 匹配结果
Watermark detected in image img_1.png with 106 good matches
Watermark detected in image img_2.png with 107 good matches
Watermark detected in image img_3.png with 147 good matches
No watermark detected in image img_4.png代码解析 extract_images_from_folder函数 该函数从指定文件夹中读取所有PNG图像并将它们调整为800x600的大小。 调用enhance_colors函数增强图像中的其他颜色降低黑、白、灰的影响。 返回增强后的图像列表和文件名列表。 detect_watermark函数 使用ORB特征检测器检测图像和水印模板中的关键点和描述符。 使用BFMatcher对象匹配描述符。 根据匹配距离排序并过滤较好的匹配。 如果好的匹配数量超过一个阈值则认为检测到了水印。 enhance_colors函数 将图像从BGR转换到HSV颜色空间。 定义黑、白、灰色的HSV范围并创建掩码。 反转掩码以选择非黑白灰色区域。 增强非黑白灰色区域的饱和度和亮度。 将图像从HSV转换回BGR。 main函数 从指定文件夹中读取所有图像并调用enhance_colors函数进行处理。 读取水印图像。 遍历每一张图像使用特征匹配来检测水印。 输出每张图像是否检测到水印及其匹配的质量。
结论
通过这种方法可以识别具有不同位置和角度的固定类型水印。使用特征匹配技术即使水印的位置和角度有所变化也能进行有效的识别和检测。希望这篇文章对你有所帮助。如果有任何问题或需要进一步的修改请在评论区告诉我。