OpenCV和Halcon分别实现彩色图像的白平衡效果
实现白平衡算法中的灰度世界法,能有效改善图像发红/发蓝/发绿的现象
1、OpenCV
#include <opencv2/opencv.hpp>
using namespace cv;int main()
{Mat g_srcImage,dstImage;vector<Mat> g_vChannels;g_srcImage = imread("C:/Users/Administrator/Desktop/01.jpg");imshow("原图",g_srcImage);//waitKey(0);//分离通道split(g_srcImage, g_vChannels);Mat imageBlueChannel = g_vChannels.at(0);Mat imageGreenChannel = g_vChannels.at(1); Mat imageRedChannel = g_vChannels.at(2);double imageBlueChannelAvg = 0;double imageGreenChannelAvg = 0;double imageRedChannelAvg = 0;//求各通道的平均值imageBlueChannelAvg = mean(imageBlueChannel)[0];imageGreenChannelAvg = mean(imageGreenChannel)[0];imageRedChannelAvg = mean(imageRedChannel)[0];//求出个通道所占增益double K = (imageRedChannelAvg+imageGreenChannelAvg+imageRedChannelAvg) / 3;double Kb = K / imageBlueChannelAvg;double Kg = K / imageGreenChannelAvg;double Kr = K / imageRedChannelAvg;//更新白平衡后的各通道BGR值addWeighted(imageBlueChannel,Kb,0,0,0,imageBlueChannel);addWeighted(imageGreenChannel,Kg,0,0,0,imageGreenChannel);addWeighted(imageRedChannel,Kr,0,0,0,imageRedChannel);merge(g_vChannels,dstImage);//图像各通道合并imshow("白平衡后图",dstImage);waitKey(0);return 0;
}
API详解:
void cvAddWeighted( const CvArr* src1, double alpha,const CvArr* src2, double beta,double gamma, CvArr* dst );
参数1:src1,图1
参数2:alpha,图1数组元素权重
参数3:src2,图2
参数4:beta,图2数组元素权重
参数5:gamma,图1与图2叠加之后再添加的数值。不要太大,不然图片一片白。总和等于255以上就是纯白色了。
参数6:dst,输出图片
即:目标图=src1*alpha+src2*beta+gamma
2、Halcon
dev_close_window ()
read_image (Image, 'D:/hellowprld/2/test777.jpg')
dev_open_window_fit_image (Image, 0, 0, -1, -1, WindowHandle)
dev_display (Image)
*将图像进行通道分解,分别转换为三个通道的RGB图像
decompose3 (Image, Red, Green, Blue)
*实现白平衡算法中的灰度世界法,能有效改善图像发红/发蓝/发绿的现象
*取RGB各个通道的平均值
get_domain (Red, Domain)
intensity (Domain, Red, MeanRed, DeviationRed)
get_domain (Green, Domain)
intensity (Domain, Green, MeanGreen, DeviationGreen)
get_domain (Blue, Domain)
intensity (Domain, Blue, MeanBlue, DeviationBlue)
*求出个通道所占增益
K := (MeanRed + MeanGreen + MeanBlue) / 3.0
Kr := K / MeanRed
Kg := K / MeanGreen
Kb := K / MeanBlue
*更新白平衡后的各通道值White Balance
scale_image (Red, ImageScaledRed, Kr, 0)
scale_image (Green, ImageScaledGreen, Kg, 0)
scale_image (Blue, ImageScaledBlue, Kb, 0)
compose3(ImageScaledRed, ImageScaledGreen, ImageScaledBlue, Multichannel0)
write_image (Multichannel0, 'jpeg 100', 0, 'D:/opt.jpg')
stop()
---------------附录--------------------
两幅图像之间处理的算子
1.sub_image(ImageMinuend, ImageSubtrahend : ImageSub : Mult, Add : )
对两幅图像做减法 g' := (g1 - g2) * Mult + Add
程序如下:
read_image (Scene00, 'autobahn/scene_00')
read_image (Scene01, 'autobahn/scene_01')
sub_image (Scene00, Scene01, ImageSub1, 1, 0)
dev_display(ImageSub1)
2.abs_image(Image : ImageAbs : : )
计算图像的绝对值模型
3.crop_part(Image : ImagePart : Row, Column, Width, Height : )
剪切出一个长方形的图像
4.add_image(Image1, Image2 : ImageResult : Mult, Add : )
两图像相叠加 g' := (g1 + g2) * Mult + Add
5.max_image(Image1, Image2 : ImageMax : : )
计算两幅图像每个像素点的最大值
6.min_image(Image1, Image2 : ImageMin : : )
计算两幅图像每个像素点的最小值
7.div_image(Image1, Image2 : ImageResult : Mult, Add : )
两幅图像相除 g' := g1 / g2 * Mult + Add
8.mult_image(Image1, Image2 : ImageResult : Mult, Add : )
两幅图像相乘 g' := g1 * g2 * Mult + Add
OpenCV和Halcon分别实现彩色图像的白平衡效果相关推荐
- opencv和halcon标定参数结果对比
在Stake Overflow里面有人讨论过这个问题,当我们用Opencv和halcon一起编程序的时候,需要考虑两者参数的不同,现在碰到的问题就是,我在已经知道内参矩阵的前提之下,想要求出外参矩阵, ...
- opencv [c++] OpenCV实现Halcon相关算子算法
目录 1.Dyn_threshold 动态阈值 2.OpenCV实现 2.Emphasize图像锐化增强处理 3.select_shape()特征筛选 4.opencv访问遍历图像的每一个像素方法 5 ...
- OpenCV、Halcon博客与资源收藏整理备用
原文链接:https://libaineu2004.blog.csdn.net/article/details/88778170 原文作者:libaineu2004 OpenCV官网 https:// ...
- opencv和HALCON坐标系的不同
opencv的坐标原点在左上角,往右为X轴正方向,往下为Y轴正方向(用Image Watch可以很容易看出来) HALCON的坐标原点在左上角,往右为Y轴正方向,往下为X轴正方向(HALCON窗口左下 ...
- 数字图像基础,论坛,算法库matlab,opencv,halcon
......................................................... 顺便复习一下直角坐标系和极坐标系 http://zh.wikipedia.org/w ...
- opencv python 实现灰度图像和彩色图像直方图全局均衡化和自适应均衡化
首先进行简单的灰度图像的全局均衡化和自适应均衡化 import cv2 as cv import numpy as npimg = cv.imread('cun.jpg',0)# 全局直方图均衡化 i ...
- 使用OpenCV实现Halcon算法(4)OpenCV实现边缘模板匹配算法
声明:本篇仅仅是分享网上的开源项目,算法非本人原创. 本文转自:OpenCV研习社 干货 | OpenCV实现边缘模板匹配算法 - 云+社区 - 腾讯云 干货 | OpenCV实现边缘模板匹配算法 - ...
- 使用OpenCV实现Halcon算法(7)选择轮廓,select_shape
一.先看他人的文章 转载的网址是: https://www.cnblogs.com/jsxyhelu/p/4650151.html halcon源码: read_image (Image1, 'F:/ ...
- 使用OpenCV实现Halcon算法(1)亚像素提取边缘,Sub-Pixel Edge Detector
声明:本篇仅仅是分享网上的开源项目,算法非本人原创.转载文章: <A Sub-Pixel Edge Detector: an Implementation of the Canny/Devern ...
最新文章
- Angry IP Scanner 获取设备的IP
- 脑电信号预处理--去趋势化(Detrended fluctuation analysis)
- Linux,OS X mark工具(目录跳转工具)
- 关于Element学习笔记
- 前端学习(3142):react-hello-react之父组件render
- 查看目录中的内容及权限
- Adjacent Bit Counts(01组合数)
- 最简单的排序算法(C和C++实现)
- c 语言重载参数类型不同重载和,C/C++函数重载与缺省参数
- Ruby学习笔记1 -- 基本语法和数据类型, Class
- eplan加密狗已损坏_[转载]EPLAN Electric P8 仿真加密狗 error 1068 问题
- 利用Hilbert变换进行相位调制信号的解调
- 静觅爬虫学习笔记8-爬取猫眼电影
- LoRa学习<二>:Rx Duty Cycle模式实验
- 信奥中的数学 数论篇 相关资料汇总(2022.07.07)
- Google 宣布 GSoC 2014 计划Fwd: Google Summer of Code 2014 + 10 Things
- P1287 盒子与球
- python利用近似公式计算π_python如何利用公式计算π
- 差分数组分析详解+例题
- 以小饭桌网站为例介绍抓取动态网页的数据【python爬虫入门进阶】(12)
热门文章
- java生成pem格式公钥_如何以.pem格式保存证书中的公钥
- el-date-picker 的一些小坑(chang事件不生效以及页面数据不更新)
- 傅氏级数的各项系数_傅里叶系数的推导
- 手机(小米系列)不能安装mitmproxy 证书怎么办
- 前端面试想要得高分,看过来~~~
- CSS——滤镜(filter )
- 程序的耦合性与内聚性的概念 以及 “高内聚,低耦合”
- MacBook Air 13.3系统恢复及Windows 10安装心得
- threejs 热力图做成材质_ThreeJS 热力图
- cf-786B区间图最短路