在学习opencv的掩码运算后,尝试实现一个halcon的reduce_domain功能,使用掩码进行运算时,位运算符bitewise_and()、bitewise_or()、bitewise_xor()和bitewise_not()很有用!??
首先介绍一下,位运算符:
void bitwise_and(InputArray src1, InputArray src2, OutputArray dst); //dst = src1 & src2 “与”操作 void bitwise_or(InputArray src1, InputArray src2, OutputArray dst); //dst = src1 | src2 “或”操作 void bitwise_xor(InputArray src1, InputArray src2, OutputArray dst); //dst = src1 ^ src2 “异或”操作 void bitwise_not(InputArray src, OutputArray dst); //dst = ~src “非”操作
掩码运算实现裁剪图像实例:
int main(int argc, char** argv) { Mat src,dst; src = imread("D:/opencv练习图片/薛之谦.jpg"); cvtColor(src, src, COLOR_RGB2GRAY); imshow("Image", src); //创建掩码图像 Mat mask(src.rows, src.cols, CV_8UC1, Scalar(0, 0, 0)); circle(mask, Point(src.cols / 2, src.rows / 2), 90, 255, -1); //执行and运算 Mat ROI; bitwise_and(src, mask, ROI); //“与”操作 //用白色填充外部 const uchar white = 255; for (int i = 0; i < ROI.rows; i++) { for (int j = 0; j < ROI.cols; j++) { if (!mask.at<uchar>(i, j)) { ROI.at<uchar>(i, j) = white; } } } imshow("roi区域", ROI); waitKey(0); return 0; }
注:该程序仅限于灰度图像的roi提取
原文:https://www.cnblogs.com/xyf327/p/14761218.html