资源简介
opencv实现图像颜色增强算法,vs2013+opencv2.4.13 实现。、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、
代码片段和文件信息
#include
#include
using namespace std;
using namespace cv;
/*
Stretch color saturation to cover maximum possible range“
“This simple plug-in does an automatic saturation stretch.
For each channel in the image it finds the minimum and maximum values...
it uses those values to stretch the individual histograms to the full range.
For some images it may do just what you want; for others it may not work that well.
This version differs from Contrast Autostretch in that it works in HSV space and preserves hue.
*/
double vdelta = 200;
double stheta = 30;
void find_vhi_vlo(const Mat &img double &vhi double &vlo)
{
int width = img.cols;
int height = img.rows;
uchar min;
vector BGR;
split(img BGR);
//conver to CMY
BGR[0] = 255 - BGR[0];
BGR[1] = 255 - BGR[1];
BGR[2] = 255 - BGR[2];
Mat CMY(img.size() CV_8UC3);
merge(BGR CMY);
for (int i = 0; i < height; i++)
{
Vec3b *pImg = CMY.ptr(i);
for (int j = 0; j < width; j++)
{
min = pImg[j][0];
if (pImg[j][1] < min) min = pImg[j][1];
if (pImg[j][2] < min) min = pImg[j][2];
for (int k = 0; k < 3; k++)
{
pImg[j][k] -= min;
}
}
}
Mat HSV = Mat(CMY.size() CV_8UC3);
//imshow(“cmy“CMY);
cvtColor(CMY HSV COLOR_BGR2HSV);
vector vHSV;
split(HSV vHSV);
//
////find Vmin and Vmax
double vMin = 1.0;
double vMax = .0;
for (int i = 0; i < height; i++)
{
uchar *pImg = vHSV[2].ptr(i);
for (int j = 0; j < width; j++)
{
double v = (double)pImg[j] / 255.0;
if (v > vMax) vMax = v;
if (v < vMin) vMin = v;
}
}
vhi = vMax;
vlo = vMin;
}
//v线性量化
//img单通道
void quantizing_v(Mat &img double vMax double vMin)
{
if (vMax == vMin) return;
if (img.channels() != 1) return;
int width = img.cols;
int height = img.rows;
double delta = 300.0;
for (int i = 0; i < height; i++)
{
uchar *pImg = img.ptr(i);
for (int j = 0; j < width; j++)
{
//double oldPixel = (double)pImg[j];
double newPixel = ((double)pImg[j] / 255 - vMin) / (vMax - vMin);
int tmp = int(newPixel * delta);
if (tmp >255)
pImg[j] = 255;
else if (tmp < 0)
pImg[j] = 0;
else
pImg[j] = (uchar)tmp;
}
}
//cout << “new img“ << endl << img << endl;
}
void color_enhance(const Mat &img Mat &dst double vMax double vMin)
{
double v;//v量化
int width = img.cols;
int height = img.rows;
uchar min;
vector BGR;
split(img BGR);
//equalizeHist(BGR[2]BGR[2]);
//conver to CMY
BGR[0] = 255 - BGR[0];
BGR[1] = 255 - BGR[1];
BGR[2] = 255 - BGR[2];
Mat CMY(img.size() CV_8UC3);
merge(BGR CMY);
//imshow(“cmy1“ CMY);
Mat minMat(img.size() CV_8UC1);
for (int i = 0; i < height; i++)
{
Vec3b *pImg = CMY.ptr(i);
uchar *pMin = minMat.ptr(i);
for (int j = 0; j < width; j++)
{
min = pImg[j][0];
相关资源
- VisualStudioUninstaller vs卸载工具
- 组态王驱动开发包3.0.0.7(中文)
- 多窗口后台鼠标连点器
- 使用选择性重传协议实现UDP可靠通信
- VC 获得文件属性 获取文件的创建时
- 读者写者问题(读者优先,写者优先
- 用VC 编写的仿QQ聊天室程序源代码
- 外点法程序
- 外罚函数程序
- qt-电子点菜系统
- 推箱子及人工智能寻路C 源代码
- 自己写的航空订票系统c 版--数据结构
- 数据结构实验魔王语言
- MUSIC算法c 实现
- C 餐厅叫号系统(QT平)
- 国际象棋c 完整版
-
ob
jectARX给Auto CAD加工具条 - 画图程序MFC/VC/VC CRectTracker 串行化
- MFC网络编程实例
- c 课程设计 职工信息管理系统
- 基于OpenCV的数字识别468815
- VC 游戏编程—附源代码
- 使用opencv去掉二值化图像中黑色面积
- IpHlpApi.h&IpHlpApi.lib
- 清华大学 c 郑莉 ppt课件
- c 程序判断离散数学中命题公式
- 多项式求和(数据结构C 版)
- vc 6.0开发的流程图编辑器
- VC 天空盒(skyBox)实现(附源代码)
- c MFC 画多边形
评论
共有 条评论