当前位置: 首页 > article >正文

pythonnet python图像 C# .NET图像 互转

C#是dotnet的代表虽然不是一个东西但是在这里代表同一件事,不要在意细节。

pythonnet是 python 和.net无缝连接的桥梁。那么python的图像是numpy表示,C#图象是Bitmap。

做图像想要python的便利又想要dotnet的强大就需要图像类型转换。

上程序。

1.Bitmap_转opencv-python

import clr
import numpy as np
import cv2
from System.IO import MemoryStream
clr.AddReference('System.Drawing')
from System.Drawing import Bitmap

# 确保已经加载了System.Drawing程序集


# 假设你已经有了一个Bitmap对象
# 例如,从文件加载一个Bitmap对象
bitmap = Bitmap("8.bmp")

# 将Bitmap转换为字节数组
def bitmap_to_bytes(bitmap):
    stream = MemoryStream()
    bitmap.Save(stream, bitmap.RawFormat)  # 保存图像到流中
    stream.Position = 0  # 重置流的位置
    return np.frombuffer(stream.ToArray(), dtype=np.uint8)

bitmap_data = bitmap_to_bytes(bitmap)

# 使用OpenCV的imdecode函数将字节数组解码为Mat对象
mat = cv2.imdecode(bitmap_data, cv2.IMREAD_COLOR)

# 现在你可以使用OpenCV的功能处理这个Mat对象了
# 例如,将其转换为灰度图像
gray_mat = cv2.cvtColor(mat, cv2.COLOR_BGR2GRAY)

# 显示图像
cv2.imshow("Gray Image", gray_mat)
cv2.imshow("GrImage", mat)
cv2.waitKey(0)
cv2.destroyAllWindows()

2.numpy转bitmap

import clr
import numpy as np
import cv2
from System.IO import MemoryStream

clr.AddReference('System.Drawing')
from System.Drawing import Bitmap, Imaging

# 读取图像(确保路径正确)
image_path = "Lena.png"
cv_image = cv2.imread(image_path)

# 将BGR格式转换为RGB格式
cv_image_rgb = cv2.cvtColor(cv_image, cv2.COLOR_BGR2RGB)

# 创建一个与图像数据相匹配的numpy数组
h, w, c = cv_image_rgb.shape
numpy_array = np.array(cv_image_rgb, dtype=np.uint8).reshape((h, w, c))

# 创建一个MemoryStream对象并将numpy数组写入
stream = MemoryStream()
cv2.imencode('.png', numpy_array)[1].tobytes()
stream.Write(cv2.imencode('.png', numpy_array)[1].tobytes(), 0, len(cv2.imencode('.png', numpy_array)[1].tobytes()))
stream.Position = 0

# 使用.NET的System.Drawing命名空间中的Bitmap类从MemoryStream创建Bitmap对象
bitmap = Bitmap.FromStream(stream)

# 现在你有一个System.Drawing.Bitmap对象,可以在.NET环境中使用
# 例如,保存到文件
bitmap.Save("output_image.png", Imaging.ImageFormat.Png)

# 清理资源
stream.Close()


http://www.kler.cn/news/313751.html

相关文章:

  • FLUX.1+ComfyUI部署与使用:图像合成技术的新高度
  • 【JAVA开源】基于Vue和SpringBoot的在线文档管理系统
  • oracle dblink的使用并举例
  • Spring AOP的应用
  • 【计算机网络 - 基础问题】每日 3 题(十三)
  • 面试八股--stram 中map和flatmap的区别
  • 关于 NLP 深度学习的核心流程
  • 虚拟现实与PD协议快充
  • thinkphp 做分布式服务+读写分离+分库分表(分区)(后续接着写)
  • 【网络安全的神秘世界】攻防环境搭建及漏洞原理学习
  • LeetCode 459.重复的子字符串
  • 计算机网络分类
  • Ubuntu 22.04 源码下载、编译
  • 经典sql题(二)求连续登录最多天数用户
  • 将编程融入日常生活:编程游戏化学习
  • 内网穿透软件有哪些?
  • 搜维尔科技:工程师已经解决OptiTrack捕捉过程中肘部不自然的弯曲
  • 十五,Spring Boot 整合连接数据库(详细配置)
  • 金仓数据库 KingbaseES参考手册-(8.函数(三))
  • 在HTML中添加图片
  • Oracle 数据库常用命令与操作指南
  • 安全装备检测系统源码分享
  • 【Python报错已解决】To update, run: python.exe -m pip install --upgrade pip
  • sqlgun靶场通关攻略
  • 代码随想录算法训练营day39
  • 【C/C++语言系列】浅拷贝和深拷贝
  • php curl发送get、post请求
  • 等保测评:企业如何建立安全的开发环境
  • Opencv + Opencv_contrib的源码编译安装以及C++调用和cmakelist编写
  • 8.安卓逆向-安卓开发基础-安卓四大组件1