对一张任意的图像,如何得到它的灰度图像? 用C语言如何实现?
CDC *pDC = GetDC();
HBITMAP hbmp=(HBITMAP)LoadImage(NULL, m_csFilePath,IMAGE_BITMAP,0,0,LR_CREATEDIBSECTION|LR_LOADFROMFILE);
CBitmap cbmp;
cbmp.Attach(hbmp);
BITMAP bmp;
cbmp.GetBitmap(&bmp);
cbmp.Detach();
UINT * pData = new UINT[bmp.bmWidth * bmp.bmHeight];
BITMAPINFO bmpInfo;
bmpInfo.bmiHeader.biSize = sizeof(BITMAPINFOHEADER);
bmpInfo.bmiHeader.biWidth = bmp.bmWidth;
bmpInfo.bmiHeader.biHeight = -bmp.bmHeight;
bmpInfo.bmiHeader.biPlanes = 1;
bmpInfo.bmiHeader.biCompression = BI_RGB;
bmpInfo.bmiHeader.biBitCount = 32;
GetDIBits(pDC-> m_hDC,hbmp,0,bmp.bmHeight,pData,&bmpInfo,DIB_RGB_COLORS);
UINT color, r, g, b;
for(int i = 0;i < bmp.bmWidth*bmp.bmHeight;i++)
{
color = pData[i];
b = (color << 8 >> 24)*0.114;
g = (color << 16 >> 24)*0.587;
r = (color << 24 >> 24)*0.229;
pData[i] = RGB(r, g, b);
}
SetDIBits(pDC-> m_hDC, hbmp,0, bmp.bmHeight, pData,&bmpInfo, DIB_RGB_COLORS);
void CCatchScreenDlg::SaveBitmapToFile(HBITMAP hBmp, LPCWSTR lpfilename)
{
HDC hdc; //设备描述表
int ibits;
WORD wbitcount; //当前显示分辨率下每个像素所占字节数
//位图中每个像素所占字节数,定义调色板大小,位图中像素字节大小,位图文件大小 ,写入文件字节数
DWORD dwpalettesize=0, dwbmbitssize, dwdibsize, dwwritten;
BITMAP bitmap; //位图属性结构
BITMAPFILEHEADER bmfhdr; //位图文件头结构
BITMAPINFOHEADER bi; //位图信息头结构
LPBITMAPINFOHEADER lpbi; //指向位图信息头结构
//定义文件,分配内存句柄,调色板句柄
HANDLE fh, hdib, hpal, holdpal=NULL;
//计算位图文件每个像素所占字节数
hdc = CreateDC(L"DISPLAY", NULL, NULL, NULL);
ibits = GetDeviceCaps(hdc, BITSPIXEL) * GetDeviceCaps(hdc, PLANES);
DeleteDC(hdc);
if (ibits <= 1)
wbitcount = 1;
else if (ibits <= 4)
wbitcount = 4;
else if (ibits <= 8)
wbitcount = 8;
else if (ibits <= 16)
wbitcount = 16;
else if (ibits <= 24)
wbitcount = 24;
else
wbitcount = 32;
//计算调色板大小
if (wbitcount <= 8)
dwpalettesize = (1 << wbitcount) * sizeof(RGBQUAD);
//设置位图信息头结构
GetObject(hBmp, sizeof(BITMAP), (LPSTR)&bitmap);
bi.biSize = sizeof(BITMAPINFOHEADER);
bi.biWidth = bitmap.bmWidth;
bi.biHeight = bitmap.bmHeight;
bi.biPlanes = 1;
bi.biBitCount = wbitcount;
bi.biCompression = BI_RGB;
bi.biSizeImage = 0;
bi.biXPelsPerMeter = 0;
bi.biYPelsPerMeter = 0;
bi.biClrUsed = 0;
bi.biClrImportant = 0;
dwbmbitssize = ((bitmap.bmWidth * wbitcount+31)/32)* 4 * bitmap.bmHeight ;
//为位图内容分配内存
hdib = GlobalAlloc(GHND,dwbmbitssize + dwpalettesize + sizeof(BITMAPINFOHEADER));
lpbi = (LPBITMAPINFOHEADER)GlobalLock(hdib);
*lpbi = bi;
// 处理调色板
hpal = GetStockObject(DEFAULT_PALETTE);
if (hpal)
{
hdc = ::GetDC(NULL);
holdpal = SelectPalette(hdc, (HPALETTE)hpal, false);
RealizePalette(hdc);
}
// 获取该调色板下新的像素值
GetDIBits(hdc, hBmp, 0, (UINT) bitmap.bmHeight,(LPSTR)lpbi +
sizeof(BITMAPINFOHEADER)+dwpalettesize,(BITMAPINFO*)lpbi, DIB_RGB_COLORS);
//恢复调色板
if (holdpal)
{
SelectPalette(hdc, (HPALETTE)holdpal, true);
RealizePalette(hdc);
::ReleaseDC(NULL, hdc);
}
//创建位图文件
fh = CreateFile(lpfilename, GENERIC_WRITE, 0, NULL,
CREATE_ALWAYS,FILE_ATTRIBUTE_NORMAL|
FILE_FLAG_SEQUENTIAL_SCAN, NULL);
if (fh == INVALID_HANDLE_VALUE)
return;
// 设置位图文件头
bmfhdr.bfType = 0x4d42; // "bm"
dwdibsize = sizeof(BITMAPFILEHEADER) + sizeof(BITMAPINFOHEADER)+
dwpalettesize + dwbmbitssize;
bmfhdr.bfSize = dwdibsize;
bmfhdr.bfReserved1 = 0;
bmfhdr.bfReserved2 = 0;
bmfhdr.bfOffBits = (DWORD)sizeof(BITMAPFILEHEADER) +
(DWORD)sizeof(BITMAPINFOHEADER)+ dwpalettesize;
// 写入位图文件头
WriteFile(fh, (LPSTR)&bmfhdr, sizeof(BITMAPFILEHEADER), &dwwritten, NULL);
// 写入位图文件其余内容
WriteFile(fh, (LPSTR)lpbi, dwdibsize, &dwwritten, NULL);
//清除
GlobalUnlock(hdib);
GlobalFree(hdib);
CloseHandle(fh);
}
灰度测试是什么意思呢?如果对互联网软件研发行业不太了解的话,可能对这个词还是很陌生的,其实灰度测试就是指如果软件要在不久的将来推出一个全新的功能,或者做一次比较重大的改版的话,要先进行一个小范围的尝试...
对于图像由彩色图转化为灰度图有三种方法 分别为 加权法 均值法 最大值法 加权法就是 GRAY==0.3*R+0.59*G+0.11*B 均值法就是 GRAY==(R+G+B)/3 最大值发就是 max(R,G,B) 二、代码 [filename,pathname...
什么是灰度发布? 灰度发布,又名金丝雀发布,或者灰度测试,是指在黑与白之间能够平滑过渡的一种发布方式。在其上可以进行A/B testing,即让一部分用户继续用产品特性A,一部分用户开始用产品特性B,如果用户对B...
使用opencv将一幅灰度图转为彩色图。 使用函数:cvtColor(); Mat imgGray= imread("gray.jpg",0); Mat imgRGB; cvtColor(imgGray, imgRGB, COLOR_GRAY2RGB); 说明:输入图像gray.jpg是单通道,8...
im=imread('abc.bmp'); im2=rgb2gray(im); im2包含的就是灰度值。后面不带分号,运行就会显示出来结果。
为什么80%的码农都做不了架构师?>>> ...
什么是灰度发布,其要点有哪些?最近跟几个聊的来的同行来了一次说聚就聚的晚餐,聊了一下最近的工作情况如何以及未来规划等等,酒足饭饱后我们聊了一个话题“灰度发布”。因为笔者所负责的产品还没有达到他们产品...
python读取图像 原图: import cv2 # 利用opencv读取图像 import numpy as np # 利用matplotlib显示图像 import matplotlib.pyplot as plt img = cv2.imread("./lena.png") #读取图像 ...
灰度直方图是数字图像处理中一个最简单、最有用的工具,它描述了一幅图像的灰度级内容 。Matlab标准函数 imhist()为显示灰度直方图的函数,其横坐标表示像素的灰度级别,纵坐标为像素点的个数。需要注意的是,在图像...
图像灰度值的概念是什么?灰度也可以认为是亮度,简单说就是色彩的深浅程度。 实际上在我们的日常生活中,通过三原色色彩深浅的组合,可以组成各种不同的颜色。产品能够展现的灰度数量越多,也就意味着这款...
使用Nginx实现灰度发布灰度发布是指在黑与白之间,能够平滑过渡的一种发布方式。AB test就是一种灰度发布方式,让一部分用户继续用A,一部分用户开始用B,如果用户对B没有什么反对意见,那么逐步扩大范围,把所有...
灰度测试是什么意思?如果您对互联网软件开发行业了解不多,您可能对这个词不太熟悉。事实上,灰度测试是指如果软件要在不久的将来推出新功能,或者进行重大修改,你必须首先做少量的试验工作,然后慢慢增加数量,...
〇.引 我们都知道Google Play是支持灰度发布的,也叫做概率发布。...如果停止(halt)灰度之后,再次灰度1%还是不是同一批用户? 一.简介灰度发布(staged rollout) 当我们在应用市场更新App的时候可以选择灰...
图像灰度值的概念是什么?灰度也可以认为是亮度,简单说就是色彩的深浅程度。 实际上在我们的日常生活中,通过三原色色彩深浅的组合,可以组成各种不同的颜色。产品能够展现的灰度数量越多,也就意味着这款产品的...
灰度共现/共生矩阵,其上元素,是灰度图像中某种形状的像素对,在全图中出现的次数(或者是概率)。(不理解?没关系,一会就明白了) 可以用作图像的一种特征,借以区分不同的图像。 灰度共现矩阵是方阵,矩阵的...
灰度发布概念 可能大家都听说过灰度发布这个词,模糊的知道什么意思,但具体用法不甚清楚。今天就来详解介绍下我理解的灰度发布,从什么是灰度发布?灰度发布的作用有哪些?微服务架构中怎么实现灰度发布?等等问题...
0黑,255是白
文章出处:http://zhidao.baidu.com/question/530453986.html?...
一、你得知道直方图统计的是什么。 图1、左暗右亮,高多低少 这张图片告诉我们,直方图统计的是什么。横轴:代表从黑到白的影调;纵轴:代表像素量。也就是说,直方图统计的是“照片中”不同影调的像素量多少。...
function th=thresh_md(a);... %返回图像矩阵各个灰度等级像素个数 [m,n]=size(a); N=m*n-sum(sum(find(a==0),1)); L=256; %指定图像灰度等级 count=count/N;%计算出各灰度出现的概率 for i=2:L if count(i)~=0
二值图像的膨胀和腐蚀几乎每个学习图像处理的人很快就了解了,由腐蚀和膨胀这两个简单的操作的结合而引申出来的开运算和闭运算...那么如果我们的操作对象是一幅灰度图,而不是只有黑白两种像素的二值图像呢?其实很...
256色图像属于伪彩色图像,但是他也是8位的呀,他和256灰度图有什么差别?256色图像是如何表示颜色的? 灰度图像:每个像素由一个字节,即是八位,共256种色,且红绿蓝三原色分量相等。(即 256色不一定是灰度图,...
数字图像,又称为数码图像或数位图像,是二维图像用有限数字数值像素的表示。数字图像是由模拟图像数字化得到的、以像素为基本元素的、可以用数字计算机或数字电路存储和处理的图像。
灰度拉伸是一种图像增强算法,属于线性点运算的一种。灰度拉伸。也称对比度拉伸,是一种简单的线性点运算。它扩展图像的直方图,使其充满整个灰度级范围内。 设f(x,y)为输入图像,它的最小灰度级A和最大灰度级B的...
1、像素点像素点是最小的图像单元,一张图片由好多的像素点组成。如下图 可以看到上述图片尺寸是500 * 338 的,表示图片是由一个500 * 338的像素点矩阵构成的,这张图片的宽度是500个像素点的长度,高度是338个...
右击图片属性,摘要,点击详细属性,里面有位深度一项。如果是RGB图,位深度是24;如果是灰度和索引图,位深度是8;灰度是白灰黑表示的图,索引图有可能是彩色的,但也是8位深。
rgb图像化为灰度图是很容易的,matlab具有自带函数。 灰度图化为rgb图像:Google所得到的参考答案: https://www.mathworks.com/matlabcentral/answers/377407-how-to-convert-grayscale-to-rgb ...
最近刚开始学数字图像处理,在看到灰度级时候以为灰度只是表示黑白/深浅色图像,其实灰度级指黑白显示器中显示像素点的亮暗差别,在彩色显示器中表现为颜色的不同,灰度级越多,图像层次越清楚逼真。 注意,灰度值...
灰度也可以认为是亮度,简单说就是色彩的深浅程度。 实际上在我们的日常生活中,通过三原色色彩深浅的组合,可以组成各种不同的颜色。产品能够展现的灰度数量越多,也就意味着这款产品的色彩表现力...