opencv-python的简单应用

opencv-python的简单应用

图片矫正

原理

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

代码

python 复制代码
import cv2
import numpy as np
import matplotlib.pyplot as plt

img=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)

输出结果

相关推荐
冷冷清清中的风风火火11 分钟前
本地部署DeepSeek的硬件配置建议
人工智能·ai
sauTCc19 分钟前
RAG实现大致流程
人工智能·知识图谱
不爱学英文的码字机器29 分钟前
Python爬虫实战:从零到一构建数据采集系统
开发语言·爬虫·python
lqqjuly32 分钟前
人工智能驱动的自动驾驶:技术解析与发展趋势
人工智能·机器学习·自动驾驶
鹿鸣悠悠34 分钟前
Python 类和对象详解
开发语言·python
laocooon52385788639 分钟前
用Python实现的双向链表类,包含了头插、尾插、归并排序等功能
开发语言·python
百锦再1 小时前
在Linux上创建一个Docker容器并在其中执行Python脚本
linux·python·docker
山东布谷科技官方1 小时前
AI大模型发展对语音直播交友系统源码开发搭建的影响
人工智能·实时音视频·交友
thinkMoreAndDoMore1 小时前
深度学习(2)-深度学习关键网络架构
人工智能·深度学习·机器学习
紫雾凌寒1 小时前
计算机视觉基础|从 OpenCV 到频域分析
深度学习·opencv·计算机视觉·傅里叶变换·频域分析