视觉图像:OpenCV感兴趣区域ROI

 时间:2024-10-13 04:10:01

1、定义ROI区域的两种方法:①指定矩形坐标,并规定好长宽;Mat img = imread("1.jpg");Mat roi = img(Rect(500, 200, 100, 300));//Rect四个形参分别是:x坐标,y坐标,长,高;注(x,y)指矩形的左上角点;②指定感兴趣行或列的范围(Range),Range是指从起始索引到终止索引的一段联系序列:Mat img = imread("1.jpg");Mat roi = img(Range(250, 250 +xleng), Range(200, 200 + yleng));//Range两个形参分别是:起始行或列,起始行或列+偏移量示例:#include<opencv2\opencv.hpp>#include<opencv2\highgui\highgui.hpp>using namespace std;using namespace cv;int main(){ Mat srcImage = imread("test.jpg"); if (!srcImage.data) { cout << "读取原始图失败!" << endl; return -1; } rectangle(srcImage, Rect(0, 0, 600, 200), Scalar(0, 255, 0),2); //将感兴趣区域框出来 imshow("ROI", srcImage); waitKey(); return 0;}

视觉图像:OpenCV感兴趣区域ROI

3、图像上添加logo:两种方法:①:首先定义ROI区域,然后进行线性叠加,使用addWeighted();线性胼秀阔绡混合操作是一种典型的二元像素操作,理论公式如下:g(x)=(1-a)f1(x)+af2(x);a:0~1;改变两幅图像混合效果;int main(){ Mat srcImage = imread("0.jpg"); if (!srcImage.data) { cout << "读取原始图失败!" << endl; return -1; } namedWindow("srcImage", WINDOW_NORMAL);//WINDOW_NORMAL允许用户自由伸缩窗口 imshow("srcImage", srcImage); Mat logo = imread("1.jpg"); if (!logo.data) { cout << "读取原始logo图失败!" << endl; return -1; } Mat imageROI = srcImage(Rect(120, 50, logo.cols, logo.rows)); //从原图中抠出矩形区域,Rect第一二参数表示矩形左上角定点的坐标,用于定位,后两个参数表示举行的宽和高 imshow("ROI", imageROI); addWeighted(imageROI, 0.65, logo, 0.35, 0., imageROI);//dst = src1[I]*alpha+ src2[I]*beta + gamma;第5参数就是偏执因子gamma。 namedWindow("原图加logo", WINDOW_NORMAL); imshow("原图加logo", srcImage); waitKey(); return 0;}

视觉图像:OpenCV感兴趣区域ROI

4、②方法二:定义ROI区域,使用copyTo实现直接拷贝覆盖int main(){ Mat srcImage = imread("0.jpg"); if (!srcImage.data) { cout << "读取原始图失败!" << endl; return -1; } namedWindow("srcImage", WINDOW_NORMAL); imshow("srcImage", srcImage); Mat logo = imread("3.jpg"); Mat mask = imread("3.jpg",0); // 加载掩模(必须是灰度图) if (!logo.data) { cout << "读取原始logo图失败!" << endl; return -1; } Mat imageROI = srcImage(Rect(205, 10, logo.cols, logo.rows)); //从原图中抠出矩形区域,Rect第一二参数表示矩形左上角定点的坐标,用于定位,后两个参数表示举行的宽和高 imshow("ROI", imageROI); logo.copyTo(imageROI,mask);//注意两个参数,一个是ROI,一个是掩模 namedWindow("原图加logo", WINDOW_NORMAL); imshow("原图加logo", srcImage); waitKey(); return 0;}

视觉图像:OpenCV感兴趣区域ROI

6、图像感兴趣区域剪切:①将需要剪切的图像图像不部分设置为ROIcvSetImageROI(src , cvRect(x,y,width,height));②新建一个爵奏笆棚与需要剪切的图像部分同样大小的新图像cvCreateImage(cvSize(width,height),IPL_DEPTH,nchannels);③将源图像复制到新建的图像中cvCopy(src,dst,0);④释放ROI区域cvResetIamgeROI(src);示例:#include "stdafx.h"#include <opencv2\opencv.hpp>#include <opencv2\highgui\highgui.hpp>#include <opencv2\features2d\features2d.hpp>#include <opencv2\core\core.hpp>using namespace std;using namespace cv;IplImage* src;IplImage* dst;int main(int argc , char** argv ){ src = cvLoadImage("0.jpg",1); cvNamedWindow("源图像",1); cvShowImage("源图像",src); cvSetImageROI(src,cvRect(0,0,0.5*src->width,0.5*src->height)); dst = cvCreateImage(cvSize(0.5*src->width,0.5*src->height), IPL_DEPTH_8U,src->nChannels); cvCopy(src,dst,0); cvResetImageROI(src); cvNamedWindow("操作后的图像",1); cvShowImage("操作后的图像",dst); cvWaitKey(0); cvDestroyWindow("操作后的图像"); cvDestroyWindow("源图像"); cvReleaseImage(&src); cvReleaseImage(&dst); return 0;}

视觉图像:OpenCV感兴趣区域ROI
  • Win7系统如何禁用加载项?
  • 抖音2019我想要怎么拍 抖音好物心愿特效教程
  • Linux下FTP的安装和登陆
  • 如何配置ASP语言开发程序的环境呢?
  • 《项目管理》课程大作业(​上海游项目)
  • 热门搜索
    毛孔粗怎么办 宝宝有湿疹怎么办 怎么快速去黑眼圈 连云港旅游攻略 端午节简介 武唐攻略 qq音乐怎么下载歌词 貂绒毛衣掉毛怎么办 夏季搭配 星际争霸攻略