图像在python以np.array()形式保存理解

>>> image = np.random.randint(10,size=(3,2,2,3))
>>> image[0][:,:,0]
array([[5, 5],
       [0, 1]])
>>> image
array([[[[5, 9, 2],
         [5, 5, 8]],

        [[0, 8, 8],
         [1, 7, 2]]],


       [[[5, 0, 3],
         [0, 0, 0]],

        [[9, 4, 4],
         [9, 0, 1]]],


       [[[8, 2, 6],
         [4, 9, 4]],

        [[8, 4, 6],
         [0, 6, 5]]]])
>>>

size(3,2,2,3)l类似图像数量3个,像素2*2,通道3

image[0][:,:,0]取出第一个图像的第一个通道值。

 

2. 将图像的三个通道值整合成一个列向量(也就是,一张图像由一个列向量表示),m个图像则有m个列向量

>>> image_flatten = image.reshape(image.shape[0],-1).T
>>> image_flatten.shape
(12, 3)
>>> image_flatten
array([[5, 5, 8],
       [9, 0, 2],
       [2, 3, 6],
       [5, 0, 4],
       [5, 0, 9],
       [8, 0, 4],
       [0, 9, 8],
       [8, 4, 4],
       [8, 4, 6],
       [1, 9, 0],
       [7, 0, 6],
       [2, 1, 5]])
>>>

reshape(,-1)中-1参数的理解:https://blog.csdn.net/weixin_39449570/article/details/78619196

  • 4
    点赞
  • 10
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
可以通过使用`ctypes`库来实现Python调用C++代码的功能。具体来说,您需要编写C++函数并将其编译为共享库(.so或.dll文件),然后使用`ctypes`库在Python中加载该库并调用该函数。 以下是一个简单的示例,演示如何使用`ctypes`库从Python中调用C++函数,该函数使用OpenCV库并返回一个`np.array`类型的图像: C++代码(mylib.cpp): ```c++ #include <opencv2/opencv.hpp> extern "C" { void process_image(unsigned char* data, int width, int height, int channels, unsigned char* output) { cv::Mat img(height, width, CV_MAKETYPE(CV_8U, channels), data); cv::Mat out_img; cv::cvtColor(img, out_img, cv::COLOR_BGR2GRAY); out_img.copyTo(cv::Mat(height, width, CV_MAKETYPE(CV_8U, 1), output)); } } ``` Python代码: ```python import ctypes import numpy as np import cv2 # Load shared library lib = ctypes.cdll.LoadLibrary('./mylib.so') # Define function arguments and return type lib.process_image.argtypes = [ctypes.POINTER(ctypes.c_ubyte), ctypes.c_int, ctypes.c_int, ctypes.c_int, ctypes.POINTER(ctypes.c_ubyte)] lib.process_image.restype = None # Load input image img = cv2.imread('input.png') data = np.frombuffer(img.tobytes(), dtype=np.uint8) width, height, channels = img.shape # Allocate output buffer out_data = np.zeros((height, width), dtype=np.uint8) # Call C++ function lib.process_image(data.ctypes.data_as(ctypes.POINTER(ctypes.c_ubyte)), width, height, channels, out_data.ctypes.data_as(ctypes.POINTER(ctypes.c_ubyte))) # Convert output buffer to np.array out_img = np.frombuffer(out_data.tobytes(), dtype=np.uint8).reshape((height, width)) # Display output image cv2.imshow('Output', out_img) cv2.waitKey(0) ``` 在这个示例中,我们使用`ctypes`库加载了名为`mylib.so`的共享库,并定义了一个名为`process_image`的函数,该函数使用OpenCV库将输入图像转换为灰度图像,并将结果保存到输出缓冲区中。然后,我们从Python中加载输入图像,并为输出图像分配一个缓冲区。最后,我们调用C++函数,并将输入和输出数据指针传递给该函数。最后,我们将输出缓冲区转换为`np.array`类型,并在OpenCV窗口中显示结果。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值