知识点 :像素逻辑操作
-bitwise_and与操作
-bitwise_xor亦或
-bitwise_or或
上面三个类似,都是针对两张图像的位操作
-bitwise_not非
针对输入图像,图像取反操作,二值图像分析中经常用
l
void QUickdemo::bitwise_demo(Mat& image)
{
Mat m1 = Mat::zeros(Size(256,256), CV_8UC3);
Mat m2 = Mat::zeros(Size(256, 256), CV_8UC3);
rectangle(m1, Rect(100, 100, 80, 80), Scalar(255, 255, 0), -1, LINE_8, 0);--在m1的图像上绘制矩形(rectangle),rect定义矩形的结构(100,100)定义在图像上的坐标,后参数(80,80)表示矩形的宽度和高度,Scalar(255,255,0)为三个通道的值,-1表示矩形是填充的,如果为正数则表明矩形的边框线宽,line_8指定线得类型,0是抗锯齿的数值设置
rectangle(m2, Rect(100, 100, 80, 80), Scalar(255, 255, 0), -1, LINE_8, 0);
imshow("m1", m1);
imshow("m2", m2);
}
与操作
取二者之间都有的部分。
void QUickdemo::bitwise_demo(Mat& image)
{
Mat m1 = Mat::zeros(Size(256,256), CV_8UC3);
Mat m2 = Mat::zeros(Size(256, 256), CV_8UC3);
rectangle(m1, Rect(100, 100, 80, 80), Scalar(255, 255, 0), -1, LINE_8, 0);
rectangle(m2, Rect(100, 100, 80, 80), Scalar(0, 255, 255), -1, LINE_8, 0);
imshow("m1", m1);
imshow("m2", m2);
Mat dst= Mat::zeros(image.size(), image.type());
bitwise_and(m1, m2, dst);
imshow("像素位操作", dst);
}
或操作
void QUickdemo::bitwise_demo(Mat& image)
{
Mat m1 = Mat::zeros(Size(256,256), CV_8UC3);
Mat m2 = Mat::zeros(Size(256, 256), CV_8UC3);
rectangle(m1, Rect(100, 100, 80, 80), Scalar(255, 255, 0), -1, LINE_8, 0);
rectangle(m2, Rect(150, 150, 80, 80), Scalar(0, 255, 255), -1, LINE_8, 0);
imshow("m1", m1);
imshow("m2", m2);
Mat dst= Mat::zeros(image.size(), image.type());
bitwise_or(m1, m2, dst);
imshow("像素位操作", dst);
}
非操作
void QUickdemo::bitwise_demo(Mat& image)
{
Mat m1 = Mat::zeros(Size(256,256), CV_8UC3);
Mat m2 = Mat::zeros(Size(256, 256), CV_8UC3);
rectangle(m1, Rect(100, 100, 80, 80), Scalar(255, 255, 0), -1, LINE_8, 0);
rectangle(m2, Rect(150, 150, 80, 80), Scalar(0, 255, 255), -1, LINE_8, 0);
imshow("m1", m1);
imshow("m2", m2);
Mat dst= Mat::zeros(image.size(), image.type());
bitwise_not(image, dst);
namedWindow("像素位操作", WINDOW_FREERATIO);
imshow("像素位操作", dst);
}
亦或操作
void QUickdemo::bitwise_demo(Mat& image)
{
Mat m1 = Mat::zeros(Size(256,256), CV_8UC3);
Mat m2 = Mat::zeros(Size(256, 256), CV_8UC3);
rectangle(m1, Rect(100, 100, 80, 80), Scalar(255, 255, 0), -1, LINE_8, 0);
rectangle(m2, Rect(150, 150, 80, 80), Scalar(0, 255, 255), -1, LINE_8, 0);
imshow("m1", m1);
imshow("m2", m2);
Mat dst= Mat::zeros(image.size(), image.type());
bitwise_xor(m1,m2, dst);
namedWindow("像素位操作", WINDOW_FREERATIO);
imshow("像素位操作", dst);
}
成果图