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)

输出结果

相关推荐
狼叔也疯狂1 分钟前
英语启蒙SSS绘本第一辑50册高清PDF可打印
人工智能·全文检索
心静财富之门16 分钟前
退出 for 循环,break和continue 语句
开发语言·python
WJSKad123524 分钟前
YOLO11-FDPN-DASI实现羽毛球拍与球的实时检测与识别研究
python
万行28 分钟前
机器学习&第四章支持向量机
人工智能·机器学习·支持向量机
幻云201032 分钟前
Next.js之道:从入门到精通
人工智能·python
0和1的舞者34 分钟前
GUI自动化测试详解(三):测试框架pytest完全指南
自动化测试·python·测试开发·自动化·pytest·测试
予枫的编程笔记37 分钟前
【Java集合】深入浅出 Java HashMap:从链表到红黑树的“进化”之路
java·开发语言·数据结构·人工智能·链表·哈希算法
llddycidy39 分钟前
峰值需求预测中的机器学习:基础、趋势和见解(最新文献)
网络·人工智能·深度学习
larance39 分钟前
机器学习的一些基本知识
人工智能·机器学习
l1t43 分钟前
利用DeepSeek辅助拉取GitHub存储库目录跳过特定文件方法
人工智能·github·deepseek