网站正常打开速度,萍乡海绵城市建设官方网站,网页设计培训 机构,j2ee博客网站开发写这个是为了解决vscode远程服务时#xff0c;无法实时显示正在处理的图像#xff0c;想知道就得保存后才能看。现在是基础示例#xff0c;你可以根据自己的要求封装。
为了方便 接收端使用的python
发送端 cpp
这里面为了方便快#xff0c;使用了缩放和压缩
文件结构
acco…写这个是为了解决vscode远程服务时无法实时显示正在处理的图像想知道就得保存后才能看。现在是基础示例你可以根据自己的要求封装。为了方便 接收端使用的python发送端 cpp这里面为了方便快使用了缩放和压缩文件结构account_dir- httplib.hmedia- cat.pngCMakeLists.txtfirst_cmake.cpprun.shfirst_cmake.cpp 文件内容#includeiostream#includeopencv2/opencv.hpp#includehttplib.hintmain(){// 使用imread函数读取图片和Python用法类似// 读取的数据保存在Mat类型的变量image中Mat是opencv中的图像数据结构类似numpy中的ndarraycv::Mat imagecv::imread(./media/cat.png);// 在终端输入命令 ./build/open_domo ./media/cat.jpg// cv::Mat image cv::imread(./media/cat.jpg, 0); // 0代表 直接加载灰度图// cv::Mat image cv::imread(argv[1]);cv::Mat resize;cv::resize(image,resize,cv::Size(640,640));// 判断图像是否读取成功返回true表示失败if(resize.empty())// 使用!image.data也可以判断{std::cout无法读取图片std::endl;return1;}std::cout图片高度 image.rows宽度 image.colsstd::endl;// 1. 创建HTTP客户端httplib::Clientclient(192.168.11.100,25565);// 2. 检查客户端是否创建成功if(!client.is_valid()){std::cout无法连接到 192.168.11.100:25565std::endl;return1;}// 循环10次是为了测试for(inti1;i10;i){std::vectorucharbuffer;// PNG压缩级别0无压缩(文件大)9最大压缩(文件小编码慢)std::vectorintpng_params{cv::IMWRITE_PNG_COMPRESSION,9};// 无压缩cv::imencode(.png,resize,buffer,png_params);std::stringimage_data(buffer.begin(),buffer.end());// // 编码为二进制// std::vectoruchar buffer;// cv::imencode(.png, image, buffer);// // 转为字符串// std::string image_data(buffer.begin(), buffer.end());// // 4. 发送POST请求// // image/jpeg这是JPEG图像格式// // image/png这是PNG图像格式// // text/plain这是纯文本// // application/json这是JSON数据httplib::Result resultclient.Post(/upload,image_data,image/png);// auto res client.Post(/upload, image_data, image/jpeg);// 检查请求结果// if (result) {// // 请求成功检查状态码// if (result-status 200) {// std::cout 请求成功: result-body std::endl;// } else {// std::cout 服务器返回错误: result-status std::endl;// std::cout 响应内容: result-body std::endl;// }// } else {// // 请求失败// auto err result.error();// std::cout HTTP请求失败: httplib::to_string(err) std::endl;// }}//标志位// std::cout flags: image.flags std::endl;//图像尺寸// std::cout size: image.size std::endl;// 图像通道数//std::cout channels input_image.channels() std::endl;//维度// std::cout dims: image.dims std::endl;// // 保存图像// cv::imwrite(./gray_image.jpg, image);// imshow显示图像// cv::imshow(opencv demo, image);// 等待按键// cv::waitKey(0);return0;}CMakeLists.txt 文件内容# 最低版本要求cmake_minimum_required(VERSION3.10)# 项目信息project(demo_opencv)# 查找opencv库REQUIRED表示找不到就终止编译find_package(OpenCV REQUIRED)# 给自己写个提示 也方便查找报错原因# 关键修复变量名是 OpenCV_FOUND大小写敏感if(OpenCV_FOUND)# 找到后打印一些信息message(STATUSopenCV library status:)message(STATUS version:${OpenCV_VERSION})# 版本message(STATUS libraries:${OpenCV_LIBS})# 修复库名称应该用 OpenCV_LIBS你之前写的是 INCLUDE_DIRSmessage(STATUS include path:${OpenCV_INCLUDE_DIRS})# 库的头文件路径else()# 找不到message(STATUSopenCV library status: !!!!!! not found !!!!!!!)endif()# 添加可执行文件add_executable(first_cmake./first_cmake.cpp)# 添加头文件target_include_directories(first_cmake PRIVATE${OpenCV_INCLUDE_DIRS}${CMAKE_CURRENT_SOURCE_DIR}/account_dir# 添加你的头文件所在目录)# 添加链接target_link_libraries(first_cmake PRIVATE${OpenCV_LIBS})run.sh 文件内容rm-r buildmkdirbuildcdbuild cmake..cd../ cmake --build build ./build/first_cmake接收端 python图像关闭时鼠标点击叉号不要使用按键。fromflaskimportFlask,request,jsonifyimportcv2importnumpyasnpimportos appFlask(__name__)app.route(/upload,methods[POST])defreceive_image():whileTrue: 标准图像接收接口 try:# 1. 获取原始图像字节数据image_bytesrequest.dataprint(f收到数据大小:{len(image_bytes)}字节)# 2. 转换为OpenCV格式nparrnp.frombuffer(image_bytes,np.uint8)imgcv2.imdecode(nparr,cv2.IMREAD_COLOR)ifimgisNone:print(错误: 无法解码图像数据)returnjsonify({status:error,message:无法解码图像}),400# 3. 获取图像信息height,widthimg.shape[:2]channelsimg.shape[2]iflen(img.shape)2else1print(f解码成功:{width}x{height}, 通道数:{channels})print(f图像数据类型:{img.dtype})print(f图像最大值:{img.max()}, 最小值:{img.min()})# 4. 保存图像# 保存原始接收到的图像# cv2.imwrite(received_image.png, img)# print(f图像已保存为: received_image.png)# 调整宽高再次运行也只会加载你调整后的宽高cv2.namedWindow(1,cv2.WINDOW_NORMAL)cv2.imshow(1,img)# 必要参数名字和变量名cv2.waitKey(0)# 括号中0任意键终止单位为毫秒级别# 6. 返回响应returnjsonify({status:success,width:width,height:height,channels:channels,size_bytes:len(image_bytes)})exceptExceptionase:print(f服务器错误:{str(e)})returnjsonify({status:error,message:str(e)}),500if__name____main__:print(服务器启动在 http://0.0.0.0:25565)print(等待接收图像...)app.run(host0.0.0.0,port25565,debugTrue)