图像逻辑操作(与或非)
示例代码一(传统方法实现)
#include <iostream>
#include <opencv2\opencv.hpp>
using namespace std;
using namespace cv;
int main(void)
{
Mat src=imread("D:\\360\\show.jpg",IMREAD_GRAYSCALE);
if(!src.data)
{
cout<<"open image fail!"<<endl;
return -1;
}
int height=src.rows;
int width=src.cols;
imshow("src",src);
for(int i=0;i<height;i++)
for(int j=0;j<width;j++)
{
src.at<uchar>(i,j)=255-src.at<uchar>(i,j);
}
imshow("dst",src);
waitKey(0);
return 0;
}
调用OpenCv库函数的方法
函数定义如下:
void bitwise_not(InputArray src,OutputArray dst,InputArray mask=noArray());//dst=~src
参数解析如下:
InputArry src:输入图像
OutputArray dst:输出图像
InputArray mask:模板的作用就是选择对应图像中对应像素的副本,在位置(x,y)时,如果mask的像素值不等于0,则dst(x,y)=src(x,y);如果mask的像素值等于0,则dst(x,y)=0。模板要与源图像具有相同大小,该参数一般不需要。
与bitwise_not相关的函数还有bitwise_and()、bitwise_or()、bitwise_xor()等位操作定义,具体定义如下:
void bitwise_and(InputArray src,InputArray src1,OutputArray dst,InputArray mask=noArray());//dst=src&src1
void bitwise_or(InputArray src,InputArray src1,OutputArray dst,InputArray mask=noArray());//dst=src|src1
void bitwise_xor(InputArray src,InputArray src1,OutputArray dst,InputArray mask=noArray());//dst=src^src1
代码示例:
#include <iostream>
#include <opencv2\opencv.hpp>
using namespace std;
using namespace cv;
int main(void)
{
Mat src=imread("D:\\360\\show.jpg",IMREAD_GRAYSCALE);
if(!src.data)
{
cout<<"open image fail!"<<endl;
return -1;
}
int height=src.rows;
int width=src.cols;
imshow("src",src);
Mat dst;
bitwise_not(src,dst);
imshow("dst",dst);
waitKey(0);
return 0;
}