OPenCV3.2实现图像反差的两种方法
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
OPenCV3.2图像反差的两种方法反差图像就是用原图像素所能表达的最大像素值减去原图像素
值之后所形成的图像。由于本程序采用的是Vec3b和uchar类型的图像,所以每通道的最大值为255,255-原值=反差值。
在本程序中,将采用两种方法实现反差图像,一种是用Mat对象中的at函数来遍历每一个像素,采用“255-原值=反差值”公式实现,另一种直接使用bitwise_not函数实现。
具体实现代码如下:
#include
#include
using namespace cv;
using namespace std;
int main(int argc,char**argv)
{
//读入原图
Mat src=imread("1.jpg",0);//第二个参数:<0表示加载原图,不做任何改变;
//=0表示把原图作为灰度图像加载进来;(>0)表示把原图作为RGB图像加载进来
if(src.empty())
{
cout<<"could not load image"< return-1; } namedWindow("source image",CV_WINDOW_AUTOSIZE); imshow("source image",src); //参数准备 Mat dst_at; dst_at.create(src.size(),src.type());//存放反差之后的图像 int cols=src.cols; int rows=src.rows; int cn=src.channels(); /*namedWindow("gray",CV_WINDOW_AUTOSIZE); imshow("gray",src);*/ //利用at函数遍历图像,进行图像反差处理 for(int row=0;row for(int col=0;col { if(cn==1){ int gray=src.at dst_at.at } else if(cn==3){ int b=src.at int g=src.at int r=src.at dst_at.at dst_at.at dst_at.at } } } namedWindow("dst_at_invert",CV_WINDOW_AUTOSIZE); imshow("dst_at_invert",dst_at); //利用bitwise_not函数,反差处理 Mat dst_bit(src.size(),src.type()); bitwise_not(src,dst_bit); namedWindow("dst_bit",CV_WINDOW_AUTOSIZE); imshow("dst_bit",dst_bit); waitKey(0); return0; } 运行结果: