当前位置 : 主页 > 网络编程 > 其它编程 >

数字图像与机器视觉基础Ⅱ

来源:互联网 收集:自由互联 发布时间:2023-07-02
一、彩色图像文件转换为灰度文件1.使用opencv代码#文件路径#导入相关包importcv2importnumpyasnpsource_pathlena.jpg 一、彩色图像文件转换为灰度文件 1.使用opencv 代码 #文件路径#导入相关包import
一、彩色图像文件转换为灰度文件1.使用opencv代码#文件路径#导入相关包importcv2importnumpyasnpsource_pathlena.jpg

一、彩色图像文件转换为灰度文件

1.使用opencv 代码

#文件路径#导入相关包import cv2import numpy as npsource_path"lena.jpg"#使用opencv#读取彩色图片后面转换为灰度cv_readcv2.imread(source_path)cv_graycv2.cvtColor(cv_read,cv2.COLOR_BGR2GRAY)#灰度化cv2.imshow(lena,cv_gray)cv2.waitKey(0)

结果图 在这里插入图片描述 2.不使用opencv 代码

#不使用opencvfrom PIL import ImageI Image.open(lena.jpg)L I.convert(L)L.show()

结果图 在这里插入图片描述

二、将彩色图像(RGB)转为HSV、HSI 格式

1.转化为HSV格式

import cv2 as cvimg cv.imread(lena.jpg,1)hsv cv.cvtColor(img, cv.COLOR_BGR2HSV)cv.imshow(HSV format image,hsv)cv.waitKey(0)

结果图 在这里插入图片描述 2.彩色图像转化为HSI格式

import cv2import numpy as npdef rgbtohsi(rgb_lwpImg):rows int(rgb_lwpImg.shape[0])cols int(rgb_lwpImg.shape[1])b, g, r cv2.split(rgb_lwpImg)# 归一化到[0,1]b b / 255.0g g / 255.0r r / 255.0hsi_lwpImg rgb_lwpImg.copy()H, S, I cv2.split(hsi_lwpImg)for i in range(rows):for j in range(cols):num 0.5 * ((r[i, j]-g[i, j])(r[i, j]-b[i, j]))den np.sqrt((r[i, j]-g[i, j])**2(r[i, j]-b[i, j])*(g[i, j]-b[i, j]))theta float(np.arccos(num/den))if den 0:H 0elif b[i, j] < g[i, j]:H thetaelse:H 2*3.14169265 - thetamin_RGB min(min(b[i, j], g[i, j]), r[i, j])sum b[i, j]g[i, j]r[i, j]if sum 0:S 0else:S 1 - 3*min_RGB/sumH H/(2*3.14159265)I sum/3.0# 输出HSI图像扩充到255以方便显示一般H分量在[0,2pi]之间S和I在[0,1]之间hsi_lwpImg[i, j, 0] H*255hsi_lwpImg[i, j, 1] S*255hsi_lwpImg[i, j, 2] I*255return hsi_lwpImgif __name__ __main__:rgb_lwpImg cv2.imread("lena.jpg")hsi_lwpImg rgbtohsi(rgb_lwpImg)cv2.imshow(lena.jpg, rgb_lwpImg)cv2.imshow(hsi_lwpImg, hsi_lwpImg)key cv2.waitKey(0) ord(q):cv2.destroyAllWindows()

结果图 在这里插入图片描述

三、切割车牌

代码

import cv2import numpy as npimport ospic_folderE:/carphone/car/CP/pic_one"青E68QR3.BMP"save_pathE:/carphone/car/CP/output/#创建文件夹def mkdir(path):folderos.path.exists(path)if not folder:#判断是否存在os.makedirs(path)#图片路径构建及创建文件夹plate_numberspic_folderpic_ones_pathsave_pathpic_onemkdir(s_path)platecv2.imdecode(np.fromfile(plate_numbers,dtypenp.uint8),-1)#对图片进行处理进行二值化plate_gausscv2.GaussianBlur(plate,(5,5),0)#高斯降噪plate_graycv2.cvtColor(plate_gauss,cv2.COLOR_BGR2GRAY)#灰度化thre,plate_bwcv2.threshold(plate_gray,170,255,cv2.THRESH_BINARY)#二值化#闭运算填充空洞#构造一个全1的5*5的矩阵kernelnp.ones((8,8),int)#设置形态学操作卷积的大小plate_closecv2.morphologyEx(plate_bw,cv2.MORPH_CLOSE,kernel)#腐蚀运算,消除掉中间那颗螺丝的影响#构造一个全1的5*5的矩阵kernelnp.ones((3,3),int)#设置形态学操作卷积的大小plate_corrcv2.erode(plate_close,kernel,iterations1)#切割图片并保存def cutting(start,end,order,src,path):dstsrc[:,start-3:end3]file_namepathstr(order).jpgcv2.imencode(".jpg",dst)[1].tofile(file_name)image,plate_count,hircv2.findContours(plate_corr,cv2.RETR_EXTERNAL ,cv2.CHAIN_APPROX_NONE)#检测所有轮廓所有轮廓建立一个等级树结构。plate_readcv2.imdecode(np.fromfile(plate_numbers,dtypenp.uint8),-1)resultplate_readfor i in range(len(plate_count)):cntplate_count[i]x,y,w,hcv2.boundingRect(cnt)save_path_os_pathmkdir(save_path_o)cutting(x,xw,i,plate_read,save_path_o)

在这里插入图片描述 不用opencv

#flag是用来判断字符个数的当flag为7时就代表已经全部识别完了#word是用来判断一个字的开始和结束开始时word会加1结束时word也会加一所以为2就检测完了一个字flag0word0word_start0word_end0word_colorFalse#判断某一列中是否有字体的颜色save_path_as_path/h/plate_readcv2.imdecode(np.fromfile(plate_numbers,dtypenp.uint8),-1)for i in range(len(plate_corr[0])):#遍历每一列word_colorFalseif 255 in plate_corr[:,i]:word_colorTrueif word_colorTrue and word0:#如果检测到字体的颜色word1word1word_startielif word_colorFalse and word1:#判断字结束word1word_endi3flag1mkdir(save_path_a)cutting(word_start,word_end,flag,plate_read,save_path_a)if word2:word0word_start0word_end0if flag7:break

在这里插入图片描述

四、参考文献

https://blog.csdn.net/m0_50360098/article/details/115047693 https://daipuweiai.blog.csdn.net/article/details/78236347 https://blog.csdn.net/weixin_46129506/article/details/121880966?spm1001.2014.3001.5501

【本文转自:香港高防服务器 http://www.558idc.com/hkgf.html 复制请保留原URL】
网友评论