OpenCV的简单练习

1、读取一张彩色图像并将其转换为灰度图。

python 复制代码
import cv2
import matplotlib.pyplot as plt
import numpy as np
img=plt.imread('./flower.png')
img_gray=cv2.cvtColor(img,cv2.COLOR_BGR2GRAY)
cv2.imshow('image',img)
cv2.imshow('image1',img_gray)
cv2.waitKey(0)

2、二值化与形态学操作‌

编写程序,读取一张彩色图像【flower.png】,将其转换为灰度图,然后进行二值化处理。

接着,对二值化后的图像执行腐蚀和膨胀操作,并显示处理前后的图像。

python 复制代码
import numpy as np
import cv2
img_binary=cv2.imread('hq.png')
 
kernal=cv2.getStructuringElement(cv2.MORPH_ELLIPSE,#指定形状 矩形 椭圆 十字形
                               (5,5))
img_erode=cv2.erode(img_binary,kernal)
img_erode_dilate=cv2.dilate(img_erode,kernal)
cv2.imshow('img_binary',img_binary)
 
cv2.imshow('image_erode',img_erode)
cv2.imshow('image_erode_dilate',img_erode_dilate)
 
cv2.waitKey(0)

3、图像变换与颜色识别‌

编写程序,读取一张彩色图像,执行以下操作:

将图像缩放至指定大小(例如,宽度和高度都缩小为原来的一半)。

对缩放后的图像应用仿射变换,实现图像的旋转(例如,旋转45度)。

将图像从BGR颜色空间转换为HSV颜色空间,并提取出特定的颜色范围(例如,提取黄色区域)。

显示处理后的图像,并在图像上标记出识别到的颜色区域。

python 复制代码
import cv2
import numpy as np
img=cv2.imread('./sj.jpg')
#获取变换矩阵
M=cv2.getRotationMatrix2D((img.shape[1]/2,img.shape[0]/2),#旋转的中心点(x,y),一般选择图片的中心
                          45,
                          0.5#缩小一倍
                          )
#对图像进行放射变换
img_warp=cv2.warpAffine(img,#要旋转的图像
                        M,#旋转矩阵
                        (img.shape[0],img.shape[1]),#输出图像的大小
                        flags=cv2.INTER_LINEAR,#插值方式
                        # borderMode=cv2.BORDER_WRAP#边缘填充方式,默认为常数填充,显示为黑色
                        )
img_hsv=cv2.cvtColor(img_warp,cv2.COLOR_BGR2HSV)
#掩膜
hsv_min=np.array([26,43,46])
hsv_max=np.array([34,255,255])
img_mark=cv2.inRange(img_hsv,hsv_min,hsv_max)
yellow_only = np.zeros_like(img_warp)
yellow_only[img_mark == 255] = img_warp[img_mark == 255]
 
cv2.imshow('image',img)
cv2.imshow('image_warp',yellow_only)
cv2.waitKey(0)

4、图像矫正

编写程序,读取一张彩色图像,执行以下操作

找到原图 和目标图的四个点,获取透视变换矩阵

对图像应用透视变换,实现油画区域的矫正

python 复制代码
import cv2
import numpy as np
 
img=cv2.imread('./pic.png')
points1=np.float32([[175,143],[621,35],[89,491],[652,546]])
points2=np.float32([[min(points1[:,0]),min(points1[:,1])],
                   [max(points1[:,0]),min(points1[:,1])],
                   [min(points1[:,0]),max(points1[:,1])],
                   [max(points1[:,0]),max(points1[:,1])]])
M=cv2.getPerspectiveTransform(points1,points2)
img_Perspective=cv2.warpPerspective(img,M,(img.shape[1],img.shape[0]))
cv2.imshow('image',img)
cv2.imshow('image_Perspective',img_Perspective)
cv2.waitKey(0)

五、

请编写一段Python代码,使用OpenCV库对一张图像进行以下处理:

将图像转换为灰度图。

使用高斯滤波器平滑图像,内核大小为5x5,标准差为1。

使用Canny边缘检测算法检测图像边缘,阈值1为50,阈值2为150。

在检测到的边缘图像上绘制轮廓,轮廓颜色为红色,厚度为2。

python 复制代码
import cv2
img=cv2.imread('./tubao.png')
img_gray=cv2.cvtColor(img,cv2.COLOR_BGR2GRAY)
# img_binary=cv2.adaptiveThreshold(img_gray,255,cv2.ADAPTIVE_THRESH_GAUSSIAN_C,cv2.THRESH_BINARY,7,5)
img_blur=cv2.GaussianBlur(img_gray,(5,5),1)
img_canny=cv2.Canny(img_blur,50,150)
img_copy=img.copy()
contours,_=cv2.findContours(img_canny,cv2.RETR_LIST,cv2.CHAIN_APPROX_SIMPLE)
img_draw=cv2.drawContours(img_copy,contours,-1,(0,0,255),2)
cv2.imshow('img',img)
cv2.imshow('img_draw',img_draw)
cv2.waitKey(0)

六、交通信号灯识别‌:

你正在开发一个自动驾驶系统,需要识别交通信号灯的颜色(红、黄、绿)。请设计一个简化的流程,说明如何使用OpenCV来识别交通信号灯的颜色。

思路分析‌:

读取包含交通信号灯的图像。

转换图像到HSV颜色空间。

分别为红、黄、绿三种颜色定义HSV范围,并创建三个掩膜。

对每个掩膜进行轮廓检测,识别出可能的信号灯区域。

python 复制代码
import cv2
import numpy as np
 
img=cv2.imread('./light.png')
img_copy=img.copy()
img_hsv=cv2.cvtColor(img,cv2.COLOR_BGR2HSV)
yellow_min=np.array([11,43,46])
yellow_max=np.array([25,255,255])
red_min1=np.array([0,43,46])
red_max1=np.array([10,255,255])
red_min2=np.array([156,43,46])
red_max2=np.array([180,255,255])
green_min=np.array([35,43,46])
green_max=np.array([77,255,255])
img_mask_yellow=cv2.inRange(img_hsv,yellow_min,yellow_max)
img_mask_green=cv2.inRange(img_hsv,green_min,green_max)
# mask_red1=cv2.inRange(img_hsv,red_min1,red_max1)
mask_red2=cv2.inRange(img_hsv,red_min2,red_max2)
# img_mask_red=cv2.bitwise_or(mask_red1,mask_red2)
# img_mask_color=cv2.bitwise_and(img,img,img_mask_red)
mask=cv2.bitwise_or(img_mask_yellow,img_mask_green)
mask=cv2.bitwise_or(mask,mask_red2)
 
 
contours_red,hierarchy=cv2.findContours(mask_red2,
                                    cv2.RETR_EXTERNAL,#查询轮廓的方式
                                    cv2.CHAIN_APPROX_SIMPLE#保存轮廓点坐标的方式
                                    )
contours_yellow, _ = cv2.findContours(img_mask_yellow, cv2.RETR_EXTERNAL, cv2.CHAIN_APPROX_SIMPLE)
contours_green, _ = cv2.findContours(img_mask_green, cv2.RETR_EXTERNAL, cv2.CHAIN_APPROX_SIMPLE)
 
def biankuang(contours_red,color,shape):
    max_area=0
    max_contour=0
    for i in contours_red:
        area=cv2.contourArea(i)
        if area>max_area:
            max_area=area
            max_contour=i
 
        # 绘制轮廓
    x,y,w,h=cv2.boundingRect(max_contour)
    cv2.rectangle(img_copy,[x,y],[x+w,y+h],color,2)
    # 在轮廓上添加文字
    cv2.putText(img_copy,  # 图片
                shape,  # 添加文字字符串
                (x,y-5),  # 添加文字坐标
                cv2.FONT_HERSHEY_SIMPLEX,  # 文字类型
                1,  # 文字缩放
                color)
 
biankuang(contours_red,(0,0,255),'RED')
biankuang(contours_yellow,(0,255,255),'YELLOW')
biankuang(contours_green,(0,255,0),'GREEN')
 
 
 
cv2.imshow('img',img)
cv2.imshow('img_mask_red',mask)
cv2.imshow('img_mask_copy',img_copy)
 
 
 
cv2.waitKey(0)

七、产品质量检测‌:

在一家生产彩色玩具的工厂中,需要检测产品是否按照正确的颜色进行生产。请设计一个使用OpenCV的自动化检测系统,该系统能够识别并报告不符合颜色标准的产品。

‌思路分析‌:

设定产品的标准颜色范围(HSV值)。

使用摄像头或图像文件获取待检测产品的图像。

转换图像到HSV颜色空间。

为每种标准颜色创建掩膜,并与产品图像进行比对。

识别出颜色不符合标准的产品,并记录或报告。

python 复制代码
import cv2
import numpy as np
 
# 读取图像
img = cv2.imread('../1iamge/duck.png')
img = cv2.resize(img, (600, 600))
img_copy = img.copy()
# 将BGR图像转换为HSV图像
hsv = cv2.cvtColor(img_copy, cv2.COLOR_BGR2HSV)
 
# 定义橡皮鸭的标准颜色范围(HSV值)
colors = {
    'red': {'min': np.array([0, 100, 100]), 'max': np.array([10, 255, 255]), 'color': (0, 0, 255)},
    'blue': {'min': np.array([70, 50, 50]), 'max': np.array([130, 255, 255]), 'color': (255, 0, 0)},
    'yellow': {'min': np.array([20, 100, 100]), 'max': np.array([30, 255, 255]), 'color': (0, 255, 255)},
    'green': {'min': np.array([50, 100, 100]), 'max': np.array([70, 255, 255]), 'color': (0, 255, 0)},
    'pink': {'min': np.array([130, 100, 100]), 'max': np.array([170, 255, 255]), 'color': (170, 160, 255)},
    'black': {'min': np.array([0, 0, 0]), 'max': np.array([180, 50, 50]), 'color': (0, 0, 0)},
}
 
# 检测并标记每种颜色的橡皮鸭
for color_name, color_range in colors.items():
    mask = cv2.inRange(hsv, color_range['min'], color_range['max'])
    contours, _ = cv2.findContours(mask, cv2.RETR_EXTERNAL, cv2.CHAIN_APPROX_SIMPLE)
    for contour in contours:
        if cv2.contourArea(contour) > 100:  # 忽略太小的区域
            x, y, w, h = cv2.boundingRect(contour)
            cv2.rectangle(img_copy, (x, y), (x + w, y + h), color_range['color'], 2)
            cv2.putText(img_copy, color_name, (x, y - 10), cv2.FONT_HERSHEY_SIMPLEX, 0.9, color_range['color'], 1)
 
# 显示结果
cv2.imshow('img', img)
cv2.imshow('img_copy', img_copy)
 
# 等待按键按下
cv2.waitKey(0)
相关推荐
china—hbaby18 分钟前
人工智能在汽车领域的技术应用
人工智能·汽车
睡觉狂魔er1 小时前
自动驾驶控制与规划——Project 2: 车辆横向控制
人工智能·机器学习·自动驾驶
♢.*1 小时前
自动驾驶2022-2024年论文汇总与解析
论文阅读·人工智能·计算机视觉·nlp·自动驾驶
亿佛3 小时前
pure跟踪模拟 不算自动驾驶仿真
人工智能·机器学习
果冻人工智能3 小时前
人工智能大语言模型起源篇,低秩微调(LoRA)
人工智能·深度学习·语言模型
JiYH3 小时前
YOLO系列,从V1~V10,持续更新(Pytorch实现)
人工智能·pytorch·yolo
野蛮的大西瓜3 小时前
如何持续优化呼叫中心大模型呼出机器人的性能?
java·人工智能·语言模型·自然语言处理·机器人·信息与通信
Milk夜雨3 小时前
机器学习一点基础
人工智能·机器学习
HUIBUR科技3 小时前
制造业4.0:AI与机器人如何重塑生产线
人工智能·制造
德林恩宝3 小时前
焦距与视差的关系及其对深度估计的影响
人工智能·数码相机·计算机视觉