opencv-python的简单应用

ops/2024/12/17 14:35:46/

opencv-python的简单应用

  • 图片矫正
    • 原理
    • 代码
    • 输出结果
  • 添加水印
    • 原理
    • 代码
    • 输出结果
  • 识别图片颜色并绘制轮廓
  • 原理
    • 输出结果

图片矫正

原理

通过选取道图片的角点,再通过得到的点来进行变换得到变换矩阵,最后将图片按照变换矩阵进行变换,得到矫正后的图像

代码

python">import cv2
import numpy as np
import matplotlib.pyplot as pltimg=cv2.imread('youhua.png')cv2.imshow('img',img)
cv2.waitKey(0)
pos1=np.float32([[175,142],[621,35],[89,491],[652,546]])
pos2=np.float32([[min(pos1[:,0]),min(pos1[:,1])],[max(pos1[:,0]),min(pos1[:,1])],[min(pos1[:,0]),max(pos1[:,1])],[max(pos1[:,0]),max(pos1[:,1])]])
M=cv2.getPerspectiveTransform(pos1,pos2)
dst=cv2.warpPerspective(img,M,(img.shape[1],img.shape[0]))
cv2.imshow('dst',dst)
cv2.waitKey(0)

输出结果

在这里插入图片描述

添加水印

原理

主要就是先将水印提取出来,然后将图片中需要添加水印的部分选出来,将其融合,最后放回原图中,得到添加水印的图片

代码

python"># 导入两张图
img=cv2.imread('imge.jpg')
logo=cv2.imread('LOGO.jpg')
# 调整图像大小
logo=cv2.resize(logo,(100,100))
#提取出原图中的添加logo地方
det=img[:100,:100]
# 转换为灰度,创建掩码
logo_gray=cv2.cvtColor(logo,cv2.COLOR_BGR2GRAY)
logo_mask = cv2.adaptiveThreshold(logo_gray, 255, cv2.ADAPTIVE_THRESH_MEAN_C, cv2.THRESH_BINARY_INV, 11, 4)
# 提取出图案
logo=cv2.bitwise_or(logo,logo,mask=logo_mask)
# 将图像融合
det=cv2.bitwise_or(det,logo)
# 将添加完成的图案放回原图
img[:100,:100]=det
# cv2.imshow('logo',logo)
# cv2.waitKey(0)
print(img.shape,logo.shape)
# cv2.imshow("logo",logo)
# cv2.imshow('det',det)
# 显示图案
cv2.imshow('img',img)
cv2.waitKey(0)

输出结果

识别图片颜色并绘制轮廓

原理

先按照颜色提取出掩码,然后绘制轮廓

python">import cv2
import numpy as np
# 读取图片
img=cv2.imread('color_1.png')
#转换为hsv识别颜色
img_hsv=cv2.cvtColor(img,cv2.COLOR_BGR2HSV)
# 提取黄色
hsv_lower=np.array([20,150,200])
hsv_upper=np.array([40,255,255])
img_mask=cv2.inRange(img_hsv,hsv_lower,hsv_upper)
#进行开运算,
img_mask=cv2.morphologyEx(img_mask,cv2.MORPH_OPEN,(5,5))
# 识别轮廓并绘制
c,h=cv2.findContours(img_mask,cv2.RETR_EXTERNAL,cv2.CHAIN_APPROX_SIMPLE)
img_copy=img.copy()
cv2.drawContours(img_copy,c,-1,(0,0,255),2)
# 对面积进行判断,并绘制方框
for i in range(len(c)):contour_area=cv2.contourArea(c[i])if contour_area>10000:x,y,w,h=cv2.boundingRect(c[i])cv2.rectangle(img_copy,(x,y),(x+w,y+h),(0,255,0),2)
cv2.imshow('img',img_copy)
cv2.waitKey(0)

输出结果

在这里插入图片描述


http://www.ppmy.cn/ops/142664.html

相关文章

大模型运用-Prompt Engineering(提示工程)

什么是提示工程 提示工程 提示工程也叫指令工程,涉及到如何设计、优化和管理这些Prompt,以确保AI模型能够准确、高效地执行用户的指令,如:讲个笑话、java写个排序算法等 使用目的 1.获得具体问题的具体结果。(如&…

在线设计平台:Axure新手的在线设计助手

Axure是一款在产品设计、用户体验和交互设计领域广泛使用的强大原型设计工具。它使设计师和产品经理能够迅速构建高保真原型,验证设计和功能,并进行用户测试。结合在线设计平台的协作特性,团队可以更高效地创建、分享和优化原型,加…

数据结构速成

1. 数据结构与算法 2. 顺序表 3. 链表 4. 栈与队列 5. 串 6. 树与二叉树(1) 7. 树与二叉树(2) 8. 图 9. 图的应用 10. 查找 11. 排序(1) 12. 排序(2)

因特网的发展三个阶段

因特网的发展大致分为哪几个阶段,这几个阶段的主要特点 第一个阶段——单个网络到互联网 1969年美国创建第一个分组交换的单个网络ARPANET(单个的分组交换网)所有要连接在ARPANET上的主机都直接与就近的节点交换机相连; 20世纪…

C# 和 go 关于can通信得 整理

在C#中开发CAN(Controller Area Network)通信接口时,确实有一些现成的NuGet包可以简化你的开发工作。这些库通常提供了与CAN硬件接口通信所需的基本功能,如发送和接收CAN消息。下面是一些常用的NuGet包: PCANBasic.NET…

架构信息收集(小迪网络安全笔记~

附:完整笔记目录~ ps:本人小白,笔记均在个人理解基础上整理,若有错误欢迎指正! 2.2 架构信息收集 引子:一个Web应用的构成,由诸多组件&服务相结合,而域名仅是处于Web架构中最表…

深入解析 Java “NoClassDefFoundError” 异常及解决方法

在 Java 开发过程中,NoClassDefFoundError 是一个令人头疼的运行时错误。该错误通常表示在编译时可用的类文件在运行时却无法找到。本文将从根源分析这一问题,探讨常见场景并提供实用的解决方法。 问题分析 java.lang.NoClassDefFoundError 是由 JVM 抛…

PostgreSQL中事件触发器Event Trigger

在PostgreSQL中,事件触发器(Event Trigger)是一种特殊的触发器类型,它允许你在特定的数据库系统事件发生时执行特定的操作。与普通的触发器不同,事件触发器并不与特定的表或视图相关联,而是与数据库级别的全…