Python-OpenCV识别图片中黑线偏离图像中心值

一、题目:

利用摄像头进行寻迹是常用的运动检测,如下图为小车跑道。请设计一个方案,能够检测出视野内(320*240)黑线偏离图像中心平均值(以中心为0,左为负值,右为正值,单位为像素)。(以某自定义静态图作为目标,如下)

 


二、本程序实现功能

本程序实现的功能:

如题


三、建议及注意事项

建议:

建议在虚拟环境里安装包依赖、运行程序

注意: 

本程序运行系统是Win10

Python解释器版本3.6.6。不得用高版本,否则,opencv报错

切记包版本不要更改,尤其是numpy,否则opencv报错

文末有程序运行过程的说明,仅供参考


四、文件夹目录 


五、源代码:

Check.py包依赖

文件名:requirements.txt

numpy==1.19.5
opencv-python==3.4.1.15

Check.py

import cv2
import numpy as np

img1 = cv2.imread("Img\img1.jpg")
gray = cv2.cvtColor(img1, cv2.COLOR_BGR2GRAY)# 转化为灰度图
retval, dst = cv2.threshold(gray, 0, 255, cv2.THRESH_OTSU)#二值化
dst = cv2.dilate(dst, None, iterations=2)# 膨胀,白区域变大
color = dst[120]# 单看第120行的像素值(图片长320,高240。用240/2)
black_count = np.sum(color == 0)#第120行像素中黑色的像素点个数
black_index = np.where(color == 0)#第120行像素中黑色的像素点的索引值,
center_now = (black_index[0][black_count - 1] + black_index[0][0]) / 2 #打印(black_index)就明白black_index[0][0]是什么了
                                                                        #black_index[0][0]不就是第一个黑像素点的位置吗,假设5个黑像素点
                                                                        #black_index[0][5-1]不就是最后一个黑像素点的位置吗
direction = center_now - 160 #减去长的一半,得到据中心的距离。 假如求点(0,6)(0,8)到x=4的距离,不就是(6+8)/2吗
print(direction)
cv2.waitKey(0)
cv2.destroyAllWindows()


六、源代码运行过程说明

源代码运行过程:

首先对图像做二值化处理,即像素点要么是0,要么是255。然后就是找到图片中心那一行像素点,即图片高的一半,然后看看黑色像素点是从哪开始开始结束,记录黑像素点的起始索引值x,和黑像素点的个数i,那么最后一个黑色像素点是x+i。假设中心(长度的一半)是4。那么距离中心的距离是(x+(x+i))/2 - 4


  • 1
    点赞
  • 17
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值