日本不卡不码高清免费观看,久久国产精品久久w女人spa,黄色aa久久,三上悠亚国产精品一区二区三区

您的位置:首頁技術文章
文章詳情頁

python和C++共享內(nèi)存?zhèn)鬏攬D像的示例

瀏覽:44日期:2022-07-07 08:38:42

原理

python沒有辦法直接和c++共享內(nèi)存交互,需要間接調(diào)用c++打包好的庫來實現(xiàn)

流程

C++共享內(nèi)存打包成庫 python調(diào)用C++庫往共享內(nèi)存存圖像數(shù)據(jù) C++測試代碼從共享內(nèi)存讀取圖像數(shù)據(jù)

實現(xiàn)

1.c++打包庫

創(chuàng)建文件

python和C++共享內(nèi)存?zhèn)鬏攬D像的示例

example.cpp

#include <iostream>#include <cassert>#include <stdlib.h>#include <sys/shm.h>#include 'opencv2/core.hpp'#include 'opencv2/imgproc.hpp'#include 'opencv2/highgui.hpp'#include 'opencv2/videoio.hpp' #define key 650#define image_size_max 1920*1080*3 using namespace std;using namespace cv; typedef struct{int rows;int cols;uchar dataPointer[image_size_max];}image_head; int dump(int cam_num,int row_image, int col_image, void* block_data_image){ int shm_id = shmget(key+cam_num,sizeof(image_head),IPC_CREAT); if(shm_id == -1) { cout<<'shmget error'<<endl; return -1; } cout << ' shem id is '<<shm_id<<endl; image_head *buffer_head; buffer_head = (image_head*) shmat(shm_id, NULL, 0); if((long)buffer_head == -1) { cout<<'Share memary can’t get pointer'<<endl; return -1; } assert(row_image*col_image*3<=image_size_max); image_head image_dumper; image_dumper.rows=row_image; image_dumper.cols=col_image; uchar* ptr_tmp_image=(uchar*) block_data_image; for (int i=0;i<row_image*col_image*3;i++) { image_dumper.dataPointer[i] = *ptr_tmp_image; ptr_tmp_image++; } memcpy(buffer_head,&image_dumper,sizeof(image_dumper)); return 1;} extern 'C'{ int dump_(int cam_num,int row_image, int col_image, void* block_data_image) { int result=dump(cam_num,row_image, col_image, block_data_image); return result; }}

CMakeLists.txt 

# cmake needs this linecmake_minimum_required(VERSION 2.8) # Define project nameproject(opencv_example_project) # Find OpenCV, you may need to set OpenCV_DIR variable# to the absolute path to the directory containing OpenCVConfig.cmake file# via the command line or GUIfind_package(OpenCV REQUIRED) # If the package has been found, several variables will# be set, you can find the full list with descriptions# in the OpenCVConfig.cmake file.# Print some message showing some of themmessage(STATUS 'OpenCV library status:')message(STATUS ' version: ${OpenCV_VERSION}')message(STATUS ' libraries: ${OpenCV_LIBS}')message(STATUS ' include path: ${OpenCV_INCLUDE_DIRS}') if(CMAKE_VERSION VERSION_LESS '2.8.11') # Add OpenCV headers location to your include paths include_directories(${OpenCV_INCLUDE_DIRS})endif() # Declare the executable target built from your sourcesadd_library(opencv_example SHARED example.cpp)add_executable(test_example test_run.cpp) # Link your application with OpenCV librariestarget_link_libraries(opencv_example ${OpenCV_LIBS})target_link_libraries(test_example ${OpenCV_LIBS})

最后生成庫

python和C++共享內(nèi)存?zhèn)鬏攬D像的示例

2.python調(diào)用C++動態(tài)庫進行存圖

#!/usr/bin/env python import sys #sys.path.append('/usr/lib/python3/dist-packages')#sys.path.append('/home/frank/Documents/215/code/parrot-groundsdk/.python/py3/lib/python3.5/site-packages') import cv2import ctypesimport numpy as npll = ctypes.cdll.LoadLibrarylib = ll('./build/libopencv_example.so')lib.dump_.restype = ctypes.c_int count = 1#path = '/home/frank/Documents/215/2020.10.24/python_ctypes/image/' while count < 30: path = './image/'+str(count)+'.jpg' print(path) image=cv2.imread(path) #cv2.imshow('test',image) #cv2.waitKey(0) image_data = np.asarray(image, dtype=np.uint8) image_data = image_data.ctypes.data_as(ctypes.c_void_p) value = lib.dump_(0,image.shape[0], image.shape[1], image_data) print(value) count += 1 if count == 30:count = 1

3.C++讀取共享內(nèi)存獲取圖像

#include <iostream>#include <stdlib.h>#include <sys/shm.h>#include 'opencv2/core.hpp'#include 'opencv2/imgproc.hpp'#include 'opencv2/highgui.hpp'#include 'opencv2/videoio.hpp' #define key 650#define image_size_max 1920*1080*3 using namespace cv;using namespace std; typedef struct{int rows;int cols;uchar dataPointer[image_size_max];}image_head; int main(){ int count = 1; while(true) { int shm_id = shmget(key+0,sizeof(image_head) ,IPC_CREAT); if(shm_id == -1) {cout<<'shmget error'<<endl; return -1; } cout << ' shem id is '<<shm_id<<endl; image_head* buffer_head; buffer_head = (image_head*)shmat(shm_id, NULL, 0); if((long)buffer_head == -1) {perror('Share memary can’t get pointern'); return -1; } image_head image_dumper; memcpy(&image_dumper, buffer_head, sizeof(image_head)); cout<<image_dumper.rows<<' '<<image_dumper.cols<<endl; uchar* data_raw_image=image_dumper.dataPointer; cv::Mat image(image_dumper.rows, image_dumper.cols, CV_8UC3); uchar* pxvec =image.ptr<uchar>(0); int count = 0; for (int row = 0; row < image_dumper.rows; row++) { pxvec = image.ptr<uchar>(row); for(int col = 0; col < image_dumper.cols; col++) {for(int c = 0; c < 3; c++){ pxvec[col*3+c] = data_raw_image[count]; count++;} } } cv::imshow('Win',image); cv::waitKey(1); } return 1;}

以上就是python和C++共享內(nèi)存?zhèn)鬏攬D像的示例的詳細內(nèi)容,更多關于python和c++傳輸圖像的資料請關注好吧啦網(wǎng)其它相關文章!

標簽: Python 編程
相關文章:
日本不卡不码高清免费观看,久久国产精品久久w女人spa,黄色aa久久,三上悠亚国产精品一区二区三区
久热re这里精品视频在线6| 国产精品久久久久毛片大屁完整版| 日韩av一级片| 国产调教一区二区三区| 91欧美极品| 亚洲国产福利| 国产中文一区| 日韩国产一二三区| 久久只有精品| 日韩午夜一区| 欧美日韩一区二区三区在线电影| 精品国产亚洲一区二区在线观看| 色婷婷狠狠五月综合天色拍| 丝袜脚交一区二区| 久久99偷拍| 日韩不卡在线| 日韩avvvv在线播放| 亚洲精品在线影院| 日韩精品福利一区二区三区| 成人综合一区| 首页国产欧美久久| 大香伊人久久精品一区二区| 亚洲免费黄色| 97国产精品| 久久狠狠亚洲综合| 四虎影视精品| 久久香蕉网站| 亚洲精品免费观看| 久久视频精品| 国产一区二区久久久久| 91精品国产91久久久久久黑人| 国产欧美69| 综合视频一区| 在线国产一区| 色综合www| 国产经典一区| 国产日韩欧美三级| 亚洲免费观看高清完整版在线观| 亚洲a一区二区三区| 国产伊人久久| 麻豆国产精品| 国产精品亚洲欧美| 欧美性www| 欧美日韩中文| 欧美日韩一区二区国产| 亚洲免费影院| 在线综合亚洲| 久久国产成人午夜av影院宅| 久久国产中文字幕| 激情视频一区二区三区| 久久精品影视| 久久美女性网| 影院欧美亚洲| 亚洲深夜av| 香蕉视频成人在线观看| 亚洲色图网站| 欧美日韩视频免费看| 久久wwww| 99精品视频在线| 91久久久精品国产| 国产一区二区精品| 中文字幕成人| 麻豆精品久久| 日韩一区二区三区免费播放| 精品在线91| 一区二区三区四区日韩| 国产欧美日韩一区二区三区在线| 国产精品s色| 色一区二区三区| 日av在线不卡| 91九色综合| 丝袜诱惑一区二区| 另类国产ts人妖高潮视频| 欧美日韩一区二区三区四区在线观看| 精品国产不卡| 成人自拍av| 蜜桃久久av一区| 国产一区二区视频在线看| 欧美1级日本1级| 欧美天堂在线| 久久久久久美女精品| 亚洲ww精品| 亚洲精品在线影院| 久久狠狠久久| 欧美在线影院| 成人在线免费观看网站| 免费看黄色91| 特黄特色欧美大片| 国产精品综合| 午夜一区在线| 精品久久中文| 日本免费一区二区视频| 一区二区小说| 久久不卡日韩美女| 日本一区二区三区视频在线看| 黄毛片在线观看| 国产精品久久久久久久久久妞妞| 激情婷婷综合| 欧美日韩精品免费观看视完整| 国产日韩亚洲欧美精品| 最新国产精品视频| 久久av一区| 国产麻豆久久| 久久久亚洲一区| 欧洲精品一区二区三区| 国产极品久久久久久久久波多结野 | 国内精品99| 欧美成a人国产精品高清乱码在线观看片在线观看久 | 国产日韩一区二区三免费高清| 自拍自偷一区二区三区| 91久久午夜| 国产女优一区| 久久亚洲影院| 在线亚洲一区| 视频一区二区三区在线| 99国产成+人+综合+亚洲欧美| 久久国产亚洲精品| 久久麻豆精品| 婷婷综合亚洲| 中文无码久久精品| 日韩国产精品久久久| 亚洲三级av| 日韩成人一级| 国产精品白丝一区二区三区| 欧美天堂一区二区| 麻豆精品久久| 成人羞羞视频在线看网址| 极品日韩av| 日韩一区二区三区精品| 国产精品传媒麻豆hd| 不卡福利视频| 亚洲一区黄色| 国产亚洲人成a在线v网站| 国产欧美日韩一级| 里番精品3d一二三区| 久久亚洲国产| 美国欧美日韩国产在线播放| 日本成人一区二区| 精品国产欧美| 欧美日韩国产亚洲一区| 国产模特精品视频久久久久| 日韩精品视频在线看| 精品国产a一区二区三区v免费| 国产精品99免费看| 欧美日韩亚洲一区三区| 麻豆成人91精品二区三区| 日韩不卡在线| 三级欧美韩日大片在线看| 国产精品久久国产愉拍| 欧美日韩视频| 日韩av中文字幕一区| 久久精品欧洲| 黑丝一区二区| 国产一区二区三区成人欧美日韩在线观看| 国产综合婷婷| 久久精品一本| 伊人久久亚洲影院| 国产aa精品| 国产美女视频一区二区| 欧美成a人国产精品高清乱码在线观看片在线观看久 | 日韩和欧美一区二区三区| 日韩另类视频| 美女精品一区二区| 综合激情网站| 婷婷综合亚洲| 国产在线观看www| 国产色99精品9i| 亚洲ww精品| 99国产成+人+综合+亚洲欧美| 国产精品99精品一区二区三区∴| 香蕉精品999视频一区二区| 岛国av在线网站| 你懂的亚洲视频| 国产精品中文字幕亚洲欧美| 亚洲精品少妇| 亚洲资源网站| 一区二区精品| 久久亚洲一区| 99在线|亚洲一区二区| 免费不卡中文字幕在线| 日韩不卡在线| 日韩欧美少妇| 久久免费高清| 亚洲成人精品| 日韩在线欧美| 四虎成人av| 国产一区二区三区不卡视频网站| 国产精品免费99久久久| 久久精品二区亚洲w码| 国产一区精品福利| 日韩精品久久久久久久电影99爱| 中文字幕系列一区| 欧美日韩国产精品一区二区亚洲| 欧美日韩视频| 免费在线观看视频一区| 视频一区二区三区入口| 日韩av网站免费在线| 国产色噜噜噜91在线精品| 韩国一区二区三区视频| 中文字幕在线视频久|