【opencv的学习】ROI区域的初步尝试

来源:互联网 发布:imovie有windows版本吗 编辑:程序博客网 时间:2024/06/05 14:09

用imageROI函数来增加某范围的像素

#include <cv.h>#include <highgui.h>int main(){IplImage* src;if (  ((src = cvLoadImage("Example1.jpg", 1)) != 0)){int x = 350;//atoi(argv[2]);int y = 350;//atoi(argv[3]);int width = 500;//atoi(argv[4]);int height = 500;// atoi(argv[5]);int add = 250;//atoi(argv[6]);cvSetImageROI(src, CvRect(x, y, width, height));//设置感兴趣区域(ROI)cvAddS(src, cvScalar(0,100,0,0), src);//cvScalar的储存顺序是B-G-R(3通道),K-Y-M-C(四通道) cvAddS函数为感兴趣区域附上颜色cvResetImageROI(src);//释放感兴趣区域(ROI)cvNamedWindow("ROI_add", CV_WINDOW_AUTOSIZE);cvShowImage("ROI_add", src);cvWaitKey(0);cvReleaseImage(&src);cvDestroyWindow("ROI_add");}}
利用其他widthStep方法把interest_img的所有像素值增加1

像素值增加1的实际效果并不明显,所以我将增加值提高了

#include <cv.h>#include <highgui.h>int main()//利用其他widthStep方法把interest_img的所有像素值增加1{IplImage* interest_img = cvLoadImage("Example1.jpg");CvRect interest_rect(30,30,300,300);IplImage* sub_img = cvCreateImageHeader(CvSize(interest_rect.width, interest_rect.height), interest_img->depth, interest_img->nChannels);sub_img->origin = interest_img->origin;sub_img->widthStep = interest_img->widthStep;sub_img->imageData = interest_img->imageData + interest_rect.y*interest_img->widthStep + interest_rect.x*interest_img->nChannels;cvAddS(sub_img, CvScalar(255), sub_img);cvNamedWindow("ROI_add", CV_WINDOW_AUTOSIZE);cvShowImage("ROI_add", sub_img);cvWaitKey(0);cvReleaseImageHeader(&sub_img);cvDestroyWindow("ROI_add");}
将src2中的ROI区域融合到src1中的ROI区域中

#include <cv.h>#include <highgui.h>int main(){IplImage *src1, *src2;if ((src1 = cvLoadImage("Example1.jpg", 1)) != 0 && (src2 = cvLoadImage("Example2.jpg", 1) )!= 0){int x = 300;//atoi(argv[3]);int y = 300;//atoi(argv[4]);int width = 300;//atoi(argv[5]);int height = 300;// atoi(argv[6]);double alpha = 1;//(double)atof(argv[7]);//对应原图像灰度,范围为[0,1]double beta = 0.5;//(double)atof(argv[8]);//对应附加图像灰度,范围为[0,1]cvSetImageROI(src1, CvRect(x, y, width, height));cvSetImageROI(src2, CvRect(300, 150, width, height));cvAddWeighted(src1, alpha, src2, beta, 0.0, src1);//cvAddWeighted将src2上的感兴趣区域融合到了src1的感兴趣区域上cvResetImageROI(src1);cvNamedWindow("Alpha_blend", 1);cvShowImage("Alpha_blend", src1);cvWaitKey();cvReleaseImage(&src1);cvDestroyWindow("Alpha_blend");}}

实际的效果根据图片的不同以及坐标等参数选择的不同都会不一样,希望可以自己尝试改变参数来达到最理想的效果。


0 0
原创粉丝点击