[14] CUDA_使用Opencv处理图像

2024-06-19 10:20
文章标签 14 cuda opencv 图像 处理 使用

本文主要是介绍[14] CUDA_使用Opencv处理图像,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

CUDA_使用Opencv处理图像

1. Opencv中的图像表示

  • Opencv 提供了Mat 类来存储图像,如下:
cv::Mat img;
img=cv::imread("cameraman.tif);
  • 定义图像的示例:
//定义单通道图像
cv::Mat img(6,6,CV_8UC1);
//32位浮点型
Mat img2(256,256,CV_32FC1);
Mat img3(1960,1024,CV_64FC3);
  • 图像的分辨率和大小决定该图像保存到磁盘上的空间,假设有3个通道、大小为1024X1024的彩色图像,则需要 3X1024X1024 bytes = 3MB 空间来存放这个图像。

2. 图像的读取和显示

  • 图像读取与显示实现如下:
#include <opencv2/opencv.hpp>
#include <iostream>using namespace cv;
using namespace std;int main(int argc, char** argv)
{// Read the image Mat img = imread("images/cameraman.tif",0);// Check for failure in reading an Imageif (img.empty()) {cout << "Could not open an image" << endl;return -1;}
//Name of the windowString win_name = "My First Opencv Program"; // Create a windownamedWindow(win_name); // Show our image inside the created window.
imshow(win_name, img); // Wait for any keystroke in the window 
waitKey(0); //destroy the created windowdestroyWindow(win_name); return 0;
}

3. 使用Opencv 创建图像

#include <opencv2/opencv.hpp>
#include <iostream>using namespace cv;
using namespace std;int main(int argc, char** argv)
{//Create blanck black color Image with seze 256x256Mat img1(256, 256, CV_8UC1, Scalar(0));String win_name1 = "Blank Image";namedWindow(win_name1,0);imshow(win_name1, img1);//Create blank blue color Image with size 256x256Mat img(256, 256, CV_8UC3, Scalar(255, 0, 0));String win_name = "Blank Blue Color Image";namedWindow(win_name,0);imshow(win_name, img);waitKey(0);destroyWindow(win_name1);destroyWindow(win_name);return 0;
}

在这里插入图片描述

  • 在空白图像上绘制形状:
#include <opencv2/opencv.hpp>
#include <iostream>using namespace cv;
using namespace std;int main(int argc, char** argv)
{//create a new image which consists of //3 channels //image depth of 8 bits //800 x 600 of resolution (800 wide and 600 high)//each pixels initialized to the value of (100, 250, 30) for Blue, Green and Red planes respectively.Mat img(512, 512, CV_8UC3, Scalar(0, 0, 0));//画线line(img, Point(0, 0), Point(511, 511), Scalar(0, 255, 0), 7);//矩形rectangle(img, Point(384, 0), Point(510, 128), Scalar(255, 255, 0), 5);//画圆circle(img, Point(447, 63), 63, Scalar(0, 0, 255), -1);//椭圆ellipse(img, Point(256, 256), Point(100, 100), 0, 0, 180, 255, -1);//添加文字putText(img, "OpenCV!", Point(10, 500), FONT_HERSHEY_SIMPLEX, 3,Scalar(255, 255, 255), 5, 8);String win_name = "Blank Blue Color Image"; //Name of the windownamedWindow(win_name); // Create a windowimshow(win_name, img); // Show our image inside the created window.waitKey(0); // Wait for any keystroke in the windowdestroyWindow(win_name); //destroy the created windowreturn 0;
}

在这里插入图片描述

  • 保存图像
bool flag=cv::imwrite("images/save_image.jpg",img);

4. 使用Opencv 处理视频

  • 处理本地视频:
#include <opencv2/opencv.hpp>
#include <iostream>
using namespace cv;
using namespace std;
int main(int argc, char* argv[])
{//open the video file from PCVideoCapture cap("images/rhinos.avi");// if not success, exit programif (cap.isOpened() == false){cout << "Cannot open the video file" << endl;return -1;}cout << "Press Q to Quit" << endl;String win_name = "First Video";namedWindow(win_name);while (true){Mat frame;// read a framebool flag = cap.read(frame);//Breaking the while loop at the end of the videoif (flag == false){break;}//display the frame imshow(win_name, frame);//Wait for 100 ms and key 'q' for exitif (waitKey(100) == 'q'){break;}}destroyWindow(win_name);return 0;
}
  • 处理网络相机:
#include <opencv2/opencv.hpp>
#include <iostream>using namespace cv;
using namespace std;int main(int argc, char* argv[])
{//open the WebcamVideoCapture cap(0); // if not success, exit programif (cap.isOpened() == false)  {cout << "Cannot open Webcam" << endl;return -1;}//get the frames rate of the videodouble fps = cap.get(CAP_PROP_FPS); cout << "Frames per seconds : " << fps << endl;
cout<<"Press Q to Quit" <<endl;String win_name = "Webcam Video";namedWindow(win_name); //create a windowwhile (true){Mat frame;bool flag = cap.read(frame); // read a new frame from video //show the frame in the created windowimshow(win_name, frame);if (waitKey(1) == 'q'){break;}}
return 0;
}
  • 保存视频:
size frame_size(640,640);
int frame_per_second = 30;
Videowriter v_writer("image/video.avi",Videowriter::fourcc('M','J','P','G'),frames_per_second,frame_size,true)
v_writer.write(frame);
v_writer.release();

这篇关于[14] CUDA_使用Opencv处理图像的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/1074759

相关文章

C语言中联合体union的使用

本文编辑整理自: http://bbs.chinaunix.net/forum.php?mod=viewthread&tid=179471 一、前言 “联合体”(union)与“结构体”(struct)有一些相似之处。但两者有本质上的不同。在结构体中,各成员有各自的内存空间, 一个结构变量的总长度是各成员长度之和。而在“联合”中,各成员共享一段内存空间, 一个联合变量

Tolua使用笔记(上)

目录   1.准备工作 2.运行例子 01.HelloWorld:在C#中,创建和销毁Lua虚拟机 和 简单调用。 02.ScriptsFromFile:在C#中,对一个lua文件的执行调用 03.CallLuaFunction:在C#中,对lua函数的操作 04.AccessingLuaVariables:在C#中,对lua变量的操作 05.LuaCoroutine:在Lua中,

Vim使用基础篇

本文内容大部分来自 vimtutor,自带的教程的总结。在终端输入vimtutor 即可进入教程。 先总结一下,然后再分别介绍正常模式,插入模式,和可视模式三种模式下的命令。 目录 看完以后的汇总 1.正常模式(Normal模式) 1.移动光标 2.删除 3.【:】输入符 4.撤销 5.替换 6.重复命令【. ; ,】 7.复制粘贴 8.缩进 2.插入模式 INSERT

Lipowerline5.0 雷达电力应用软件下载使用

1.配网数据处理分析 针对配网线路点云数据,优化了分类算法,支持杆塔、导线、交跨线、建筑物、地面点和其他线路的自动分类;一键生成危险点报告和交跨报告;还能生成点云数据采集航线和自主巡检航线。 获取软件安装包联系邮箱:2895356150@qq.com,资源源于网络,本介绍用于学习使用,如有侵权请您联系删除! 2.新增快速版,简洁易上手 支持快速版和专业版切换使用,快速版界面简洁,保留主

如何免费的去使用connectedpapers?

免费使用connectedpapers 1. 打开谷歌浏览器2. 按住ctrl+shift+N,进入无痕模式3. 不需要登录(也就是访客模式)4. 两次用完,关闭无痕模式(继续重复步骤 2 - 4) 1. 打开谷歌浏览器 2. 按住ctrl+shift+N,进入无痕模式 输入网址:https://www.connectedpapers.com/ 3. 不需要登录(也就是

vcpkg安装opencv中的特殊问题记录(无法找到opencv_corexd.dll)

我是按照网上的vcpkg安装opencv方法进行的(比如这篇:从0开始在visual studio上安装opencv(超详细,针对小白)),但是中间出现了一些别人没有遇到的问题,虽然原因没有找到,但是本人给出一些暂时的解决办法: 问题1: 我在安装库命令行使用的是 .\vcpkg.exe install opencv 我的电脑是x64,vcpkg在这条命令后默认下载的也是opencv2:x6

Toolbar+DrawerLayout使用详情结合网络各大神

最近也想搞下toolbar+drawerlayout的使用。结合网络上各大神的杰作,我把大部分的内容效果都完成了遍。现在记录下各个功能效果的实现以及一些细节注意点。 这图弹出两个菜单内容都是仿QQ界面的选项。左边一个是drawerlayout的弹窗。右边是toolbar的popup弹窗。 开始实现步骤详情: 1.创建toolbar布局跟drawerlayout布局 <?xml vers

C#中,decimal类型使用

在Microsoft SQL Server中numeric类型,在C#中使用的时候,需要用decimal类型与其对应,不能使用int等类型。 SQL:numeric C#:decimal

探索Elastic Search:强大的开源搜索引擎,详解及使用

🎬 鸽芷咕:个人主页  🔥 个人专栏: 《C++干货基地》《粉丝福利》 ⛺️生活的理想,就是为了理想的生活! 引入 全文搜索属于最常见的需求,开源的 Elasticsearch (以下简称 Elastic)是目前全文搜索引擎的首选,相信大家多多少少的都听说过它。它可以快速地储存、搜索和分析海量数据。就连维基百科、Stack Overflow、

flask 中使用 装饰器

因为要完成毕业设计,我用到fountain code做数据恢复。 于是在github上下载了fountain code的python原代码。 github上的作者用flask做了fountain code的demo。 flask是面向python的一个网站框架。 里面有用到装饰器。 今天笔试的时候,我也被问到了python的装饰器。