欢迎来到尧图网

客户服务 关于我们

您的位置:首页 > 文旅 > 明星 > [14] CUDA_使用Opencv处理图像

[14] CUDA_使用Opencv处理图像

2024/10/24 17:21:56 来源:https://blog.csdn.net/yohnyang/article/details/139784195  浏览:    关键词:[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();

版权声明:

本网仅为发布的内容提供存储空间,不对发表、转载的内容提供任何形式的保证。凡本网注明“来源:XXX网络”的作品,均转载自其它媒体,著作权归作者所有,商业转载请联系作者获得授权,非商业转载请注明出处。

我们尊重并感谢每一位作者,均已注明文章来源和作者。如因作品内容、版权或其它问题,请及时与我们联系,联系邮箱:809451989@qq.com,投稿邮箱:809451989@qq.com