python学opencv|读取图像(九)用numpy创建黑白相间灰度图

【1】引言

前述学习过程中,掌握了用numpy创建矩阵数据,把所有像素点的BGR取值设置为0,然后创建纯黑灰度图的方法,具体链接为:

python学opencv|读取图像(八)用numpy创建纯黑灰度图-CSDN博客

在更早的学习进程中,我们了解到opencv对灰度图的颜色BGR取值都是0,255,链接为:

python学opencv|读取图像(六)读取图像像素RGB值-CSDN博客

为此,我们尝试优化BGR取值,让其逐渐变化,显示黑白相间的灰度图。

【2】代码测试

【2.1】设置BGR=255

在纯黑灰度图的设计中,所有BGR=0,在这里我们先做修改,将BGR改为最大值255,获得下述代码:

python 复制代码
import numpy as np #引入numpy模块
import cv2 as cv #引入cv2模块
from imageio.v2 import imwrite

#定义图像
t=np.arange(300,600,20) #定义变量,在[300,600)区间,每隔20取一个值
t_max=np.max(t) #取变量最大值作为像素大小
print('t_max=',t_max) #输出最大值
image=np.zeros([t_max,t_max],np.uint8) #定义一个竖直和水平像素均为t最大值的全0矩阵
image[80:500,80:500]=255  #设置动态像素

#显示和保存定义的图像
cv.imshow('display-pho',image) #显示图像
cv.imwrite('image-2.jpg',image) #保存图像
cv.waitKey() #图像不关闭
cv.destroyAllWindows() #释放所有窗口

上述代码中,在垂直和水平像素区间均取80:500的范围内,设置BGR=255,相关代码为:

复制代码
image[80:500,80:500]=255  #设置动态像素

运行后的输出图像为:

++图1++

此时我们看到黑白相间的灰度图。

在区间0,255范围内,BGR=0时为纯黑色图;BGR=255时为纯白色图。

【2.2】设置BGR为变量

进一步,修改BGR为变量,对应的代码为:

复制代码
for i in range(80,500,10):
    for j in range(80,500,20):
        image[i:i+5,j:j+5]=250*np.sin(0.1*i)+250*np.tanh(0.1*i) #设置动态像素
        print('i=',i,'j=',j)
        print('image[i,j]=',image[i,j])

此时获得的图像为:

++图2++

对应的完整代码为:

python 复制代码
import numpy as np #引入numpy模块
import cv2 as cv #引入cv2模块
from imageio.v2 import imwrite

#定义图像
t=np.arange(300,600,20) #定义变量,在[300,600)区间,每隔20取一个值
t_max=np.max(t) #取变量最大值作为像素大小
print('t_max=',t_max) #输出最大值
image=np.zeros([t_max,t_max],np.uint8) #定义一个竖直和水平像素均为t最大值的全0矩阵
for i in range(80,500,10):
    for j in range(80,500,20):
        image[i:i+5,j:j+5]=250*np.sin(0.1*i)+250*np.tanh(0.1*i) #设置动态像素
        print('i=',i,'j=',j)
        print('image[i,j]=',image[i,j])

#显示和保存定义的图像
cv.imshow('display-pho',image) #显示图像
cv.imwrite('image-3.jpg',image) #保存图像
cv.waitKey() #图像不关闭
cv.destroyAllWindows() #释放所有窗口

有时候我们系那个大胆尝试一下颜色动态变化的图像,这个时候可以定义一个随机矩阵:

复制代码
k=np.random.randint(0,255,[t_max,t_max]) #创建一个随机数矩阵

然后命令所有的BGR和随机矩阵的数据一一对应:

复制代码
for i in range(80,500,10):
    for j in range(80,500,20):
        image[i:i+5,j:j+5]=k[i,j]#设置动态像素
        print('i=',i,'j=',j)
        print('image[i,j]=',image[i,j])

这时候就会得到一个类似于万家灯火的灰度图:

++图3++

此时对应的完整代码为:

python 复制代码
import numpy as np #引入numpy模块
import cv2 as cv #引入cv2模块
from imageio.v2 import imwrite

#定义图像
t=np.arange(300,600,20) #定义变量,在[300,600)区间,每隔20取一个值
t_max=np.max(t) #取变量最大值作为像素大小
print('t_max=',t_max) #输出最大值
image=np.zeros([t_max,t_max],np.uint8) #定义一个竖直和水平像素均为t最大值的全0矩阵
k=np.random.randint(0,255,[t_max,t_max]) #创建一个随机数矩阵
print('k=',k)
for i in range(80,500,10):
    for j in range(80,500,20):
        image[i:i+5,j:j+5]=k[i,j]#设置动态像素
        print('i=',i,'j=',j)
        print('image[i,j]=',image[i,j])

#显示和保存定义的图像
cv.imshow('display-pho',image) #显示图像
cv.imwrite('image-3.jpg',image) #保存图像
cv.waitKey() #图像不关闭
cv.destroyAllWindows() #释放所有窗口

【2.3】代码细节

需要注意的是 ,imagei:i+5,j:j+5的目的是为了设置白色或者黑色线条的长度和宽度。

i:i+5表示i,i+5这个区间内,竖直方向的像素范围;

j:j+5表示j,j+5这个区间内,水平方向的像素范围。

通过修改这个区间内的数据,可以实现不同像素范围内的BGR设置。

【3】总结

掌握了用numpy创建黑白相间灰度图的技巧。

相关推荐
“AI国潮设计-小江”3 分钟前
【AIGC实战】Python+SDXL打造“潮汕英歌舞IP”万能立牌插件,批量生成“发财元宝蛋糕”视觉营销方案(附源码)
开发语言·人工智能·python·prompt·aigc
砚底藏山河1 小时前
python量化实操:冷热分层存储
java·开发语言·python·金融
十五年专注C++开发1 小时前
pybind11:一个跨C++和Python平台的编程库
开发语言·c++·python·pybind11
炘爚1 小时前
数据结构算法总结
数据结构·python·算法
信誓旦旦的程序猿1 小时前
【Python量化实战宝典 #18】MACD 金叉死叉手册:DIF、DEA、柱体全拆解(Python 可跑)
java·python·股票数据api·股票数据api接口·股票api数据接口·股票量化数据api·股票量化数据接口
Patrick在香港2 小时前
一个加 1 的动作,把最大值变成了最小值
python·numpy·数据类型·整数溢出·数据精度
weixin_BYSJ19872 小时前
电竞先锋网站---附源码02032
java·vue.js·spring boot·python·django·tomcat·php
不脱发的程序猿2 小时前
红利ETF量化策略
人工智能·python·ai·程序员·量化交易·etf·策略回测
Apok'2 小时前
零基础学Python量化(1):研究大纲与流程
python·机器学习·金融·数据挖掘·数据分析
鬓戈2 小时前
llmproxy 系统开发目的和基本功能
人工智能·python