python学opencv|读取图像(四十九)原理探究:使用cv2.bitwise()系列函数实现图像按位运算

【0】基础定义

按位与运算:两个等长度二进制数上下对齐,全1取1,其余取0。

按位或运算:两个等长度二进制数上下对齐,有1取1,其余取0。

 按位异或运算: 两个等长度二进制数上下对齐,相同取0,其余取1。

 按位取反运算:一个二进制数,0变1,1变0。

【2】引言

在前序学习进程中,调用cv2.bitwise()系列函数实现了图像的按位与计算,相关文章链接包括且不限于:

python学opencv|读取图像(四十三)使用cv2.bitwise_and()函数实现图像按位与运算-CSDN博客

python学opencv|读取图像(四十五)增加掩模:使用cv2.bitwise_and()函数实现图像按位与运算-CSDN博客

python学opencv|读取图像(四十六)使用cv2.bitwise_or()函数实现图像按位或运算-CSDN博客

python学opencv|读取图像(四十七)使用cv2.bitwise_not()函数实现图像按位取反运算-CSDN博客

python学opencv|读取图像(四十八)使用cv2.bitwise_xor()函数实现图像按位异或运算-CSDN博客

图像的按位与计算,是通过对各个像素点上的BGR值进行操作:先把十进制数转化为二进制数,再进行按位计算,然后再转回十进制数输出。

由于前序文章的重点是对比按位计算前后图像的色彩变化,除按位与计算外,没有详细深究二进制按位计算过程。因此本文以之前按位与计算为基础,对此展开专题探索。

按位与计算的原理探索文章链接为:

python学opencv|读取图像(四十三)使用cv2.bitwise_and()函数实现图像按位与运算-CSDN博客

【3】项目可行性分析

以输入的外部图像为基础,调用cv2.bitwise()系列函数让图像进行按位计算后,读取相关点的BGR值,使用np.bitwise()系列函数对cv2.bitwise()系列函数按位计算进行原理呈现。

【4】代码测试

首先引入相关模块和图像:

import cv2 as cv # 引入CV模块
import numpy as np #引入numpy模块# 读取图片-直接转化灰度图
src = cv.imread('srcx.png') #读取图像
dst=src #输出图像
gray_src=cv.cvtColor(src,cv.COLOR_BGR2GRAY) #转化为灰度图
dstg=gray_src #输出图像
print('初始图像像素大小为',src.shape)
print('初始图像灰度图像素大小为',gray_src.shape)

 除了按位取反操作之外,其他按位操作均需要在引入一张图像:

# 定义第二个图像
image = np.zeros(src.shape, np.uint8)  # 定义一个竖直和水平像素与初始图像等大的全0矩阵
print('第二个图像像素大小为',image.shape)
image[50:350, :, :] = 180  # 行掩模
image[:,120:200,: ] = 255  # 列掩模
image[:, :, 2] = 120  # 第二个通道值

然后要引入一个8位单通道的二维矩阵定义掩模:

#定义掩模矩阵
mask = np.zeros((gray_src.shape), np.uint8)  # 定义一个竖直和水平像素与初始图像等大的全0矩阵
mask[280:350, :] = 155  # 水平区域
mask[:,150:350] = 100  # 竖直区域

之后就调用cv2.bitwise()系列函数执行按位计算:

#执行位运算
#按位与运算
img_and=cv.bitwise_and(src,image) #按位与运算
img_and_mask=cv.bitwise_and(src,image,mask=mask) #按位与运算
#按位或运算
img_or=cv.bitwise_or(src,image) #按位或运算
img_or_mask=cv.bitwise_or(src,image,mask=mask) #按位或运算
#按位异或运算
img_xor=cv.bitwise_xor(src,image) #按位异或运算
img_xor_mask=cv.bitwise_xor(src,image,mask=mask) #按位异或计算
#按位取反运算
img_not=cv.bitwise_not(src) #按位取反运算
img_not_mask=cv.bitwise_not(src,mask=mask) #按位异或计算

按位计算执行以后,图像的BGR值发生变化,这时候使用np.bitwise()系列函数图像的BGR值进行按位计算,以对cv2.bitwise()系列函数按位计算进行原理呈现:

#显示BGR值
print("初始图像dst像素数为[300,180]位置处的BGR=", dst[300,180],'=a')  # 获取像素数为[100,100]位置处的BGR
print("第二个图像image像素数为[300,180]位置处的BGR=", image[300,180],'=b')  # 获取像素数为[100,100]位置处的BGR
print("img_and像素数为[300,180]位置处的BGR=", img_and[300,180],'=c')  # 获取像素数为[100,100]位置处的BGR
print("img_and_mask像素数为[300,180]位置处的BGR=", img_and_mask[300,180])  # 获取像素数为[100,100]位置处的BGR
print("img_or像素数为[300,180]位置处的BGR=", img_or[300,180],'=d')  # 获取像素数为[100,100]位置处的BGR
print("img_or_mask像素数为[300,180]位置处的BGR=", img_or_mask[300,180])  # 获取像素数为[100,100]位置处的BGR
print("img_xor像素数为[300,180]位置处的BGR=", img_xor[300,180],'=e')  # 获取像素数为[100,100]位置处的BGR
print("img_xor_mask像素数为[300,180]位置处的BGR=", img_xor_mask[300,180])  # 获取像素数为[100,100]位置处的BGR
print("img_not像素数为[300,180]位置处的BGR=", img_not[300,180],'=f')  # 获取像素数为[100,100]位置处的BGR
print("img_not_mask像素数为[300,180]位置处的BGR=", img_not_mask[300,180])  # 获取像素数为[100,100]位置处的BGRa=np.zeros((1,3),np.uint8) #定义矩阵
a=dst[300,180] #将像素点BGR直接赋值给矩阵-初始图像
b=np.zeros((1,3),np.uint8) #定义矩阵
b=image[300,180] #将像素点BGR直接赋值给矩阵-第二个图像
c=np.zeros((1,3),np.uint8) #定义矩阵-np.bitwise_and
d=np.zeros((1,3),np.uint8) #定义矩阵-np.bitwise_or
e=np.zeros((1,3),np.uint8) #定义矩阵-np.bitwise_xor
f=np.zeros((1,3),np.uint8) #定义矩阵-np.bitwise_not# 二进制按位与计算
for i in range(3):  # 计数print('a', '[0,', i, ']=', a[i], '的二进制转化值=',bin(a[i]))  # 输出二进制转化值print('b', '[0,', i, ']=', b[i], '的二进制转化值=',bin(b[i]))  # 输出二进制转化值c[0, i] = np.bitwise_and(a[i], b[i])  # 赋值按位与计算值print('c', '[0,', i, ']=', c[0,i], '的二进制转化值=', bin(c[0,i]))  # 输出二进制转化值d[0, i] = np.bitwise_or(a[i], b[i])  # 赋值按位或计算值print('d', '[0,', i, ']=', d[0,i], '的二进制转化值=', bin(d[0,i]))  # 输出二进制转化值e[0, i] = np.bitwise_xor(a[i], b[i])  # 赋值按位或计算值print('e', '[0,', i, ']=', e[0, i], '的二进制转化值=', bin(e[0, i]))  # 输出二进制转化值f[0, i] = np.bitwise_not(a[i])  # 赋值按位或计算值print('f', '[0,', i, ']=', e[0, i], '的二进制转化值=', bin(f[0, i]))  # 输出二进制转化值print('c', [0, i], '是a[0,', i, ']和b[0', i, ']按位与的值=np.bitwise_and(a[0,',i, '],b[0,',i,'])=', c[0, i])  # 输出按位与计算值print('d', [0, i], '是a[0,', i, ']和b[0', i, ']按位或的值=np.bitwise_or(a[0,',i, '],b[0,',i,'])=', d[0, i])  # 输出按位或计算值print('e', [0, i], '是a[0,', i, ']和b[0', i, ']按位异或的值=np.bitwise_xor(a[0,',i, '],b[0,',i,'])=', e[0, i])  # 输出按位异或计算值print('f', [0, i], '是a[0,', i, '         ]按位取反的值=np.bitwise_not(a[0,',i, '])=', f[0, i])  # 输出按位取反计算值# 输出矩阵结果
print('a=', a)  # 输出矩阵
print('b=', b)  # 输出矩阵
print('c=', c)  # 输出矩阵
print('d=', d)  # 输出矩阵
print('e=', e)  # 输出矩阵
print('f=', f)  # 输出矩阵

由于主要关注数值变化,因此未直接显示相关图像,其余代码可作为辅助学习使用:

#合并图像
himg_and_andmask = np.hstack((img_and,img_and_mask))
himg_or_ormask   = np.hstack((img_or,img_or_mask))
himg_xor_xormask = np.hstack((img_xor,img_xor_mask))
himg_not_notmask = np.hstack((img_not,img_not_mask))# 显示和保存定义的图像
#cv.imshow('dst', dst)  # 显示图像
#cv.imshow('image', image)  # 显示图像
#cv.imshow('mask', mask)  # 显示图像
#cv.imshow('himg_and_andmask', himg_and_andmask)  # 显示图像
#cv.imshow('himg_or_ormask', himg_or_ormask)  # 显示图像
#cv.imshow('himg_xor_xormask', himg_xor_xormask)  # 显示图像
#cv.imshow('himg_not_notmask', himg_not_notmask)  # 显示图像cv.waitKey()  # 图像不关闭
cv.destroyAllWindows()  # 释放所有窗口

代码运行使用的相关图像有:

图1  初始图像srcx.png

图2  第二张图像image.png 

  图3 掩模mask.png

代码运行后,获得的相关文字输出为:

图4 图像基本属性

图5 特定像素点BGR值读取

读取到特定像素点[300,180]处的BGR之后,首先需要关注:

初始图像在此处的BGR值为:[132  80 121]

第二张图像在此处的BGR值为:[255 255 120]

其余位置的数据,其实是通过cv2.bitwise()系列函数按位计算之后获得的。为追溯这个计算过程,继续获得了输出文字:

图6 特定像素点BGR值-按位计算第一个点

需要注意的是 ,e[0,0]和f[0,0]在0b后面只有7位数字,这是因为0b01111011在0b之后的0确实没有用处,只有占位的作用,所以python就直接省略了。

图7 特定像素点BGR值-按位计算第二个点

a[0,1]和c[0,1]在0b后面只有7位数字,也是因为在0b之后的0确实没有用处,只有占位的作用,所以python就直接省略了。

图8 特定像素点BGR值-按位计算第二个点 

e[0,2]是异或计算的结果,两个二进制数上下对齐,相同取0,其余取1,只有最右侧的位置不同,其余均相同,所以最后的结果是1。

f[0,2]是按位取反的结果,虽然a[0,2]只有7位,但首位的0取反之后就是1,所以f[0,2]有8位数字。

此时的完整代码为:

import cv2 as cv # 引入CV模块
import numpy as np #引入numpy模块# 读取图片-直接转化灰度图
src = cv.imread('srcx.png') #读取图像
dst=src #输出图像
gray_src=cv.cvtColor(src,cv.COLOR_BGR2GRAY) #转化为灰度图
dstg=gray_src #输出图像
print('初始图像像素大小为',src.shape)
print('初始图像灰度图像素大小为',gray_src.shape)# 定义第二个图像
image = np.zeros(src.shape, np.uint8)  # 定义一个竖直和水平像素与初始图像等大的全0矩阵
print('第二个图像像素大小为',image.shape)
image[50:350, :, :] = 180  # 行掩模
image[:,120:200,: ] = 255  # 列掩模
image[:, :, 2] = 120  # 第二个通道值#定义掩模矩阵
mask = np.zeros((gray_src.shape), np.uint8)  # 定义一个竖直和水平像素与初始图像等大的全0矩阵
mask[280:350, :] = 155  # 水平区域
mask[:,150:350] = 100  # 竖直区域#执行位运算
#按位与运算
img_and=cv.bitwise_and(src,image) #按位与运算
img_and_mask=cv.bitwise_and(src,image,mask=mask) #按位与运算
#按位或运算
img_or=cv.bitwise_or(src,image) #按位或运算
img_or_mask=cv.bitwise_or(src,image,mask=mask) #按位或运算
#按位异或运算
img_xor=cv.bitwise_xor(src,image) #按位异或运算
img_xor_mask=cv.bitwise_xor(src,image,mask=mask) #按位异或计算
#按位取反运算
img_not=cv.bitwise_not(src) #按位取反运算
img_not_mask=cv.bitwise_not(src,mask=mask) #按位异或计算#显示BGR值
print("初始图像dst像素数为[300,180]位置处的BGR=", dst[300,180],'=a')  # 获取像素数为[100,100]位置处的BGR
print("第二个图像image像素数为[300,180]位置处的BGR=", image[300,180],'=b')  # 获取像素数为[100,100]位置处的BGR
print("img_and像素数为[300,180]位置处的BGR=", img_and[300,180],'=c')  # 获取像素数为[100,100]位置处的BGR
print("img_and_mask像素数为[300,180]位置处的BGR=", img_and_mask[300,180])  # 获取像素数为[100,100]位置处的BGR
print("img_or像素数为[300,180]位置处的BGR=", img_or[300,180],'=d')  # 获取像素数为[100,100]位置处的BGR
print("img_or_mask像素数为[300,180]位置处的BGR=", img_or_mask[300,180])  # 获取像素数为[100,100]位置处的BGR
print("img_xor像素数为[300,180]位置处的BGR=", img_xor[300,180],'=e')  # 获取像素数为[100,100]位置处的BGR
print("img_xor_mask像素数为[300,180]位置处的BGR=", img_xor_mask[300,180])  # 获取像素数为[100,100]位置处的BGR
print("img_not像素数为[300,180]位置处的BGR=", img_not[300,180],'=f')  # 获取像素数为[100,100]位置处的BGR
print("img_not_mask像素数为[300,180]位置处的BGR=", img_not_mask[300,180])  # 获取像素数为[100,100]位置处的BGRa=np.zeros((1,3),np.uint8) #定义矩阵
a=dst[300,180] #将像素点BGR直接赋值给矩阵-初始图像
b=np.zeros((1,3),np.uint8) #定义矩阵
b=image[300,180] #将像素点BGR直接赋值给矩阵-第二个图像
c=np.zeros((1,3),np.uint8) #定义矩阵-np.bitwise_and
d=np.zeros((1,3),np.uint8) #定义矩阵-np.bitwise_or
e=np.zeros((1,3),np.uint8) #定义矩阵-np.bitwise_xor
f=np.zeros((1,3),np.uint8) #定义矩阵-np.bitwise_not# 二进制按位与计算
for i in range(3):  # 计数print('a', '[0,', i, ']=', a[i], '的二进制转化值=',bin(a[i]))  # 输出二进制转化值print('b', '[0,', i, ']=', b[i], '的二进制转化值=',bin(b[i]))  # 输出二进制转化值c[0, i] = np.bitwise_and(a[i], b[i])  # 赋值按位与计算值print('c', '[0,', i, ']=', c[0,i], '的二进制转化值=', bin(c[0,i]))  # 输出二进制转化值d[0, i] = np.bitwise_or(a[i], b[i])  # 赋值按位或计算值print('d', '[0,', i, ']=', d[0,i], '的二进制转化值=', bin(d[0,i]))  # 输出二进制转化值e[0, i] = np.bitwise_xor(a[i], b[i])  # 赋值按位或计算值print('e', '[0,', i, ']=', e[0, i], '的二进制转化值=', bin(e[0, i]))  # 输出二进制转化值f[0, i] = np.bitwise_not(a[i])  # 赋值按位或计算值print('f', '[0,', i, ']=', e[0, i], '的二进制转化值=', bin(f[0, i]))  # 输出二进制转化值print('c', [0, i], '是a[0,', i, ']和b[0', i, ']按位与的值=np.bitwise_and(a[0,',i, '],b[0,',i,'])=', c[0, i])  # 输出按位与计算值print('d', [0, i], '是a[0,', i, ']和b[0', i, ']按位或的值=np.bitwise_or(a[0,',i, '],b[0,',i,'])=', d[0, i])  # 输出按位或计算值print('e', [0, i], '是a[0,', i, ']和b[0', i, ']按位异或的值=np.bitwise_xor(a[0,',i, '],b[0,',i,'])=', e[0, i])  # 输出按位异或计算值print('f', [0, i], '是a[0,', i, '         ]按位取反的值=np.bitwise_not(a[0,',i, '])=', f[0, i])  # 输出按位取反计算值# 输出矩阵结果
print('a=', a)  # 输出矩阵
print('b=', b)  # 输出矩阵
print('c=', c)  # 输出矩阵
print('d=', d)  # 输出矩阵
print('e=', e)  # 输出矩阵
print('f=', f)  # 输出矩阵#合并图像
himg_and_andmask = np.hstack((img_and,img_and_mask))
himg_or_ormask   = np.hstack((img_or,img_or_mask))
himg_xor_xormask = np.hstack((img_xor,img_xor_mask))
himg_not_notmask = np.hstack((img_not,img_not_mask))# 显示和保存定义的图像
#cv.imshow('dst', dst)  # 显示图像
#cv.imshow('image', image)  # 显示图像
#cv.imshow('mask', mask)  # 显示图像
#cv.imshow('himg_and_andmask', himg_and_andmask)  # 显示图像
#cv.imshow('himg_or_ormask', himg_or_ormask)  # 显示图像
#cv.imshow('himg_xor_xormask', himg_xor_xormask)  # 显示图像
#cv.imshow('himg_not_notmask', himg_not_notmask)  # 显示图像cv.waitKey()  # 图像不关闭
cv.destroyAllWindows()  # 释放所有窗口

综上所述:

a.图像的按位与计算,是通过对各个像素点上的BGR值进行操作:先把十进制数转化为二进制数,再进行按位计算,然后再转回十进制数输出。

b.使用np.bitwise()系列函数对cv2.bitwise()系列函数按位计算进行原理呈现中继续发现,python在输出二进制的过程中,会省略0b之后紧跟的0。

【5】总结

专题探索了cv2.bitwise()系列函数按位计算时的BGR值二进制转化和按位计算过程。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/diannao/68654.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

面试经典150题——图的广度优先搜索

文章目录 1、蛇梯棋1.1 题目链接1.2 题目描述1.3 解题代码1.4 解题思路 2、最小基因变化2.1 题目链接2.2 题目描述2.3 解题代码2.4 解题思路 3、单词接龙3.1 题目链接3.2 题目描述3.3 解题代码3.4 解题思路 1、蛇梯棋 1.1 题目链接 点击跳转到题目位置 1.2 题目描述 给你一…

【架构面试】一、架构设计认知

涉及分布式锁、中间件、数据库、分布式缓存、系统高可用等多个技术领域,旨在考查候选人的技术深度、架构设计能力与解决实际问题的能力。 1. 以 Redis 是否可以作为分布式锁为例: 用 Redis 实现分布式锁会存在哪些问题? 死锁:如果…

MySQL基本架构SQL语句在数据库框架中的执行流程数据库的三范式

MySQL基本架构图: MySQL主要分为Server层和存储引擎层 Server层: 连接器:连接客户端,获取权限,管理连接 查询缓存(可选):在执行查询语句之前会先到查询缓存中查看是否执行过这条语…

跟李沐学AI:视频生成类论文精读(Movie Gen、HunyuanVideo)

Movie Gen:A Cast of Media Foundation Models 简介 Movie Gen是Meta公司提出的一系列内容生成模型,包含了 3.2.1 预训练数据 Movie Gen采用大约 100M 的视频-文本对和 1B 的图片-文本对进行预训练。 图片-文本对的预训练流程与Meta提出的 Emu: Enh…

C++模板初识

文章目录 一、函数模板1. 函数模板2. 函数模板、模板的特例化、非模板函数的重载关系3. 外部调用4. 模板的非类型参数5. 代码示例 二、类模板 一、函数模板 1. 函数模板 模板函数:在函数调用点,编译器用用户指定的类型,从原模板实例化一份函…

深入MapReduce——从MRv1到Yarn

引入 我们前面篇章有提到,和MapReduce的论文不太一样。在Hadoop1.0实现里,每一个MapReduce的任务并没有一个独立的master进程,而是直接让调度系统承担了所有的worker 的master 的角色,这就是Hadoop1.0里的 JobTracker。在Hadoop1…

Baklib深入解析企业内容管理与内容中台的本质差异

内容概要 在当前信息化快速发展的时代,企业迫切需要高效的内容管理解决方案。企业内容管理(ECM)和内容中台是满足这一需求的两种不同系统。企业内容管理的主要作用是对企业内部的各种文档、数据进行整理和存储,确保信息资源的整合…

Ansible介绍与入门学习

一、Ansible的介绍(Ansible is a radically simple IT automation engine 极简的IT自动化工具) 1.Ansible是一款 运维的自动化工具,常用于软件部署自动化、配置自动化、管理自动化等,其内置大量的功能模块来满足日常的工作需要…

1.27补题 回训练营

E 智乃的小球 题目描述 在一条无限长的水平直线上,有 n 个小球,每个小球的质量相同,体积可以忽略不计。这些小球初始时位于直线上的不同位置,并且每个小球有一个初始速度,速度为 -1 m/s 或 1 m/s。速度为 -1 m/s 表示…

[JavaWeb]搜索表单区域

一.注意事项 设置外边距:margin:(参数可省去部分)上 下 左 右 二.源代码 <!DOCTYPE html> <html lang"zh-CN"> <head> <meta charset"UTF-8"> <title>Tlias智能学习辅助系统</title> <style> /* 导航栏样…

题单:插入排序

题目描述 给定 n 个元素的数组&#xff08;下标从1开始计&#xff09;&#xff0c;请使用插入排序对其进行排序&#xff08;升序&#xff09;。 输入格式 两行&#xff0c;第一行为一个整数 n&#xff0c;表示元素的个数。 第二行 n 个空格分隔的整数&#xff0c;表示数组的…

PYH与MAC的桥梁MII/MIIM

在学习车载互联网时&#xff0c;看到了一句话&#xff0c;Processor通过DMA直接存储访问与MAC之间进行数据的交互&#xff0c;MAC通过MII介质无关接口与PHY之间进行数据的交互。常见的以太网硬件结构是&#xff0c;将MAC集成进Processor芯片&#xff0c;将PHY留在Processor片外…

前端进阶:深度剖析预解析机制

一、预解析是什么&#xff1f; 在前端开发中&#xff0c;我们常常会遇到一些看似不符合常规逻辑的代码执行现象&#xff0c;比如为什么在变量声明之前访问它&#xff0c;得到的结果是undefined&#xff0c;而不是报错&#xff1f;为什么函数在声明之前就可以被调用&#xff1f…

基于聚类与相关性分析对马来西亚房价数据进行分析

碎碎念&#xff1a;由于最近太忙了&#xff0c;更新的比较慢&#xff0c;提前祝大家新春快乐&#xff0c;万事如意&#xff01;本数据集的下载地址&#xff0c;读者可以自行下载。 1.项目背景 本项目旨在对马来西亚房地产市场进行初步的数据分析&#xff0c;探索各州的房产市…

范冰冰担任第75届柏林电影节主竞赛单元评委 共鉴电影佳作

近日&#xff0c;备受瞩目的柏林电影节迎来了新一届盛事&#xff0c;而华人演员范冰冰将以主竞赛单元评委身份亮相&#xff0c;引发了广泛关注。此前她已担任过戛纳国际电影节、东京国际电影节、圣塞巴斯蒂安国际电影节等众多电影节主竞赛单元评委。作为国际影坛的知名人物&…

Ollama 运行从 ModelScope 下载的 GGUF 格式的模型

本文系统环境 Windows 10 Ollama 0.5.7 Ollama 是什么&#xff1f; Ollama 可以让你快速集成和部署本地 AI 模型。它支持各种不同的 AI 模型&#xff0c;并允许用户通过简单的 API 进行调用 Ollama 的安装 Ollama 官网 有其下载及安装方法&#xff0c;非常简便 但如果希…

“腾讯、钉钉、飞书” 会议开源平替,免费功能强大

在数字化时代&#xff0c;远程办公和线上协作越来越火。然而&#xff0c;市面上的视频会议工具要么贵得离谱&#xff0c;要么功能受限&#xff0c;甚至还有些在数据安全和隐私保护上让人不放心。 今天开源君给大家安利一个超棒的开源项目 - Jitsi Meet&#xff0c;这可是我在网…

【教学类-89-01】20250127新年篇01—— 蛇年红包(WORD模版)

祈愿在2025蛇年里&#xff0c; 伟大的祖国风调雨顺、国泰民安、每个人齐心协力&#xff0c;共同经历这百年未有之大变局时代&#xff08;国际政治、AI技术……&#xff09; 祝福亲友同事孩子们平安健康&#xff08;安全、安全、安全&#xff09;、巳巳如意&#xff01; 背景需…

在彼此的根系里呼吸

爱如草木&#xff0c;需以晨露滋养&#xff0c;而非绳索捆缚。一段健康的亲密关系&#xff0c;恰似两株根系相连却各自向阳的树——风起时枝叶相触&#xff0c;晴空下共享光影&#xff0c;却始终保有向地心深处生长的自由。那些纠缠的根须是信任编织的网&#xff0c;容得下沉默…

2025年1月30日(任意截面、自定义截面梁的设置)

Ansys 在ANSYS中&#xff0c;以下是这些术语的详细解释&#xff1a; Nodal Solution (节点解): Nodal Solution指的是在有限元分析中计算出的节点处的物理量解。通常包括节点的位移、反应力等信息。节点解是分析结果的基础&#xff0c;因为它们可以用来计算其他重要的物理量&a…