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 天前
基于深度学习的机械臂抓取
人工智能
wxin_VXbishe1 天前
springboot居家养老管理系统-计算机毕业设计源码55953
java·c++·spring boot·python·spring·django·php
Hi_kenyon1 天前
Plotly高级可视化库的使用方法(二)
python·plotly
希艾席帝恩1 天前
数字孪生如何重塑现代制造体系?
大数据·人工智能·数字孪生·数据可视化·数字化转型
互亿无线明明1 天前
国际金融短信:如何为跨境金融业务构建稳定安全的消息通知链路?
java·python·安全·eclipse·django·virtualenv·pygame
浔川python社1 天前
关于浔川 AI 翻译项目推进建议的公告
人工智能
武汉海翎光电1 天前
从数据采集到智能决策:船舶传感器的技术跃迁之路
大数据·人工智能
我送炭你添花1 天前
Pelco KBD300A 模拟器:05+1.本项目中的链式调用类设计详解
python·自动化·运维开发
ULTRA??1 天前
归并排序算法实现,kotlin,c++,python
c++·python·kotlin