OpenCV中的掩码(mask)操作
2014-04-19 17:46
302 查看
今天需要对图像中的某片区域设置颜色,于是使用void cvSet( CvArr* arr, CvScalar value, const CvArr* mask=NULL )函数,对于mask参数,我想当然的认为是创建一个imageHeader,然后将其数据指针设置为目标区域的起始点,size设置为目标区域,widthStep设置为源图像一样就行了。谁知出现错误。查了下参考手册,看到这么几句话
操作掩码是8比特单通道的数组,它指定了输出数组中被改变的元素。
函数 cvSet 拷贝数量值到输出数组的每一个被mask选定的元素:
arr(I)=value if mask(I)!=0
于是猜测mask的尺寸应该和源图像一致,对于源图像而言,某个像素的颜色是否被设置取决于对应的mask数组中的那个元素的值是否为true
为true则设置,false则不设置。
于是试着将某个图像的上半部分的颜色设置为黑色
代码如下:
结果如下:
操作掩码是8比特单通道的数组,它指定了输出数组中被改变的元素。
函数 cvSet 拷贝数量值到输出数组的每一个被mask选定的元素:
arr(I)=value if mask(I)!=0
于是猜测mask的尺寸应该和源图像一致,对于源图像而言,某个像素的颜色是否被设置取决于对应的mask数组中的那个元素的值是否为true
为true则设置,false则不设置。
于是试着将某个图像的上半部分的颜色设置为黑色
代码如下:
#include <iostream> #include "cv.h" #include "highgui.h" using namespace std; int main() { cvNamedWindow("SRC"); cvNamedWindow("DEST"); IplImage* img = cvLoadImage("D:\\F Download\\Lixtary-300.png"); cvShowImage("SRC", img); IplImage* mask = cvCreateImage(cvSize(img->width, img->height), IPL_DEPTH_8U, 1); mask->origin = img->origin; for(int i = 0; i<mask->height/2; i++) { char* ptr = mask->imageData+i*mask->widthStep; for(int j = 0; j<mask->width; j++) { ptr[j] = 1; } } cvSet(img, cvScalar(0, 0, 0), mask); cvShowImage("DEST", img); cvWaitKey(); cvReleaseImage(&img); cvReleaseImageHeader(&mask); cvDestroyWindow("SRC"); cvDestroyWindow("DEST"); return 0; }
结果如下:
相关文章推荐
- 7.OpenCv矩阵的掩码操作
- opencv(C++)在矩阵上进行掩码操作
- OpenCV学习:矩阵的掩码操作
- OpenCV 对图像进行掩码操作
- OpenCV学习笔记(五)图像掩码操作
- Opencv之矩阵的掩码操作
- OpenCV对图像进行mask操作
- opencv:图像的掩码操作
- opencv中mask操作
- 【OpenCV图像处理】八、图像的掩码操作
- OpenCV实验系列之Mask操作
- 理解矩阵的掩码操作 使用opencv锐化图片
- 关于opencv 图像掩膜操作srcImage.copyto(dstImage, mask)说明
- bitmaps位图和mask掩码常用操作
- OpenCV之core 模块. 核心功能(1)Mat - 基本图像容器 OpenCV如何扫描图像、利用查找表和计时 矩阵的掩码操作 使用OpenCV对两幅图像求和(求混合(blending))
- OpenCV学习笔记:矩阵的掩码操作
- (11)Air Band OpenCV2.4.13_矩阵掩码操作
- OpenCV实践(2)- 矩阵的掩码操作
- Opencv之矩阵的掩码操作
- OpenCV(4)-图像掩码操作(卷积)--平滑处理