1500字范文,内容丰富有趣,写作好帮手!
1500字范文 > Opencv-Python图像像素均值 方差 绘制几何形状

Opencv-Python图像像素均值 方差 绘制几何形状

时间:2021-03-05 18:03:06

相关推荐

Opencv-Python图像像素均值 方差 绘制几何形状

图像像素均值、方差

计算数组元素的均值和方差函数cv.meanStdDev()。传入数组数据,返回数组数据的均值和方差。在图像数组中,可以计算出图像数组的像素均值和方差。

使用np.minnp.max可以计算数组元素的最小值和最大值。在图像数组中,可以计算每个通道像素最小值和最大值。

以下面图像为例,计算该图像的像素均值和方差,以及每个通道的像素最小值和最大值。

# -*-coding:utf-8-*-"""File Name: image_shape_painting.pyProgram IDE: PyCharmDate: 21:12Create File By Author: Hong"""import cv2 as cvimport numpy as npdef pixel_operation(image_path: str):img = cv.imread(image_path, cv.IMREAD_COLOR)cv.imshow('input', img)# 注意:python中的print函数默认换行,可以用end=''或者接任意字符# 像素均值、方差means, dev = cv.meanStdDev(img)print('means: {}, \n dev: {}'.format(means, dev))# 像素最大值和最小值min_pixel = np.min(img[:, :, 0])max_pixel = np.max(img[:, :, -1])print('min: {}, max: {}'.format(min_pixel, max_pixel))# 若是一个空白图像blank = np.zeros((300, 300, 3), dtype=np.uint8)# 像素均值、方差# blank[:, :] = (255, 0, 255)means, dev = cv.meanStdDev(blank)print('means: {}, \n dev: {}'.format(means, dev))cv.waitKey(0)cv.destroyAllWindows()if __name__ == '__main__':path = 'images/2.png'pixel_operation(path)

运行结果:

means: [[182.14066441][159.24370946][144.10951802]], dev: [[49.00258211][44.59737827][38.95002303]]min: 14, max: 255means: [[0.][0.][0.]], dev: [[0.][0.][0.]]

绘制几何形状

使用opencv中一些几何函数可以在图像上绘制几何形状,这些函数有:cv.rectangle()cv.circle()cv.line()cv.putText()。分别是绘制矩形、圆、直线和文字。

关于这些函数的使用在这里不做过多赘述。主要将以下cv.putText()显示中文乱码的问题。

比如正常情况下我运行:cv.putText(img1, 'Hello, World!', (50, 50), cv.FONT_HERSHEY_SIMPLEX, 1.0, (255, 0, 0), 2, 8)

可以显示正常。

一旦改成中文,就显示乱码。cv.putText(img1, '你好,世界', (50, 50), cv.FONT_HERSHEY_SIMPLEX, 1.0, (255, 0, 0), 2, 8)

解决方法,写一个绘制文字的函数,解决中文乱码问题。

# 弥补putText()显示中文乱码的问题def image_add_text(img, text, left, top, text_color, text_size):if isinstance(img, np.ndarray): # 判断是否是opencv图片类型,是就转换Image类型image = Image.fromarray(cv.cvtColor(img, cv.COLOR_BGR2RGB))# 创建一个可以在给定图像上绘制的对象draw = ImageDraw.Draw(image)# 字体的格式font_style = ImageFont.truetype("font/simsun.ttc", text_size, encoding='utf-8')# 绘制文本draw.text((left, top), text, text_color, font=font_style)# 转换回opencv格式并返回return cv.cvtColor(np.asarray(image), cv.COLOR_RGB2BGR)

完整代码:绘制几何形状和文字。

# -*-coding:utf-8-*-"""File Name: image_shape_painting.pyProgram IDE: PyCharmDate: 21:12Create File By Author: Hong"""import cv2 as cvimport numpy as npfrom PIL import Image, ImageDraw, ImageFont# 弥补putText()显示中文乱码的问题def image_add_text(img, text, left, top, text_color, text_size):if isinstance(img, np.ndarray): # 判断是否是opencv图片类型,是就转换Image类型image = Image.fromarray(cv.cvtColor(img, cv.COLOR_BGR2RGB))# 创建一个可以在给定图像上绘制的对象draw = ImageDraw.Draw(image)# 字体的格式font_style = ImageFont.truetype("font/simsun.ttc", text_size, encoding='utf-8')# 绘制文本draw.text((left, top), text, text_color, font=font_style)# 转换回opencv格式并返回return cv.cvtColor(np.asarray(image), cv.COLOR_RGB2BGR)def drawing_demo():img1 = np.zeros((512, 512, 3), dtype=np.uint8)temp = np.copy(img1)# 绘制矩形cv.rectangle(img1, (50, 50), (400, 400), (0, 0, 255), 4, 8, 0)# 绘制圆形cv.circle(img1, (200, 200), 100, (255, 0, 0), -1, 8, 0)# 绘制直线cv.line(img1, (50, 50), (400, 400), (0, 255, 0), 2, 8, 0)# 写文字# cv.putText(img1, '你好,世界', (50, 50), cv.FONT_HERSHEY_SIMPLEX, 1.0, (255, 0, 0), 2, 8)img1 = image_add_text(img1, '你好,世界', 50, 50, (255, 0, 0), 20)# # 擦除# # 方法1# img1[:, :, :] = 0# # 方法2# img1 = tempcv.imshow('input', img1)cv.waitKey(0)cv.destroyAllWindows()if __name__ == '__main__':path = 'images/2.png'drawing_demo()

结果成功显示中文。完美!

更多计算机视觉知识,请关注微信公众号“AI与计算机视觉”。

本内容不代表本网观点和政治立场,如有侵犯你的权益请联系我们处理。
网友评论
网友评论仅供其表达个人看法,并不表明网站立场。