| 网站首页 | 业界新闻 | 小组 | 威客 | 人才 | 下载频道 | 博客 | 代码贴 | 在线编程 | 编程论坛
欢迎加入我们,一同切磋技术
用户名:   
 
密 码:  
共有 2052 人关注过本帖
标题:把灰度图转换为单色假彩色图像,要有强度区别,这样代码对么
只看楼主 加入收藏
张live
Rank: 1
等 级:新手上路
帖 子:9
专家分:0
注 册:2015-4-22
收藏
 问题点数:0 回复次数:15 
把灰度图转换为单色假彩色图像,要有强度区别,这样代码对么
程序代码:
Dim x, y, hdc1, imgr As Long
Dim img As Long
hdc1 = Pic1.hdc
For x = 0 To Pic1.Width
For y = 0 To Pic1.Height
img = GetPixel(hdc1, x, y)
imgr = Red(img)
Pic4.PSet (x, y), RGB(imgr, 0, 0)
Next y
Next x

上面是我写的源代码,菜鸟不会,正在努力学习中,求大神多多指点与帮助,小弟感激不尽。不会上图,出来效果了,但是不懂什么是强度区别。
搜索更多相关主题的帖子: color 
2015-04-22 15:41
lianyicq
Rank: 12Rank: 12Rank: 12
等 级:贵宾
威 望:26
帖 子:737
专家分:3488
注 册:2013-1-26
收藏
得分:0 
你这个问题来源于VB之外,是图像处理的问题吧。知道了什么是灰度,什么是假彩色,知道了转换的原理,才可能用VB实现。
img是取到的x,y坐标点象素的RGB值。这个Red是自定义的?

大开眼界
2015-04-22 15:55
张live
Rank: 1
等 级:新手上路
帖 子:9
专家分:0
注 册:2015-4-22
收藏
得分:0 
red的确是自定义的,我想知道的问题是这样用vb处理之后的图像是否具有强度区别。非常感谢您的回答。
2015-04-22 16:01
lianyicq
Rank: 12Rank: 12Rank: 12
等 级:贵宾
威 望:26
帖 子:737
专家分:3488
注 册:2013-1-26
收藏
得分:0 
估计你是把R值分离出来再显示,就象这个
Private Sub Command1_Click()
Picture1.AutoSize = False
Picture2.AutoSize = False
Picture1.AutoRedraw = True
Picture2.AutoRedraw = True
Picture1.ScaleMode = 3
Picture2.ScaleMode = 3
CommonDialog1.ShowOpen
Picture1.Picture = LoadPicture(CommonDialog1.FileName)
End Sub
Private Sub Command2_Click()
Dim i, j As Integer
Dim r, g, b As Integer
Dim color As Long
For i = 0 To Picture1.ScaleWidth
For j = 0 To Picture1.ScaleHeight
color = Picture1.Point(i, j)
r = (color And &HFF&)
g = (color And &HFF00&) \ 256&
b = (color And &HFF0000) \ 65536
Select Case Text1.Text
  Case Is = "r"
  Picture2.PSet (i, j), RGB(r, 0, 0)
  Case Is = "g"
  Picture2.PSet (i, j), RGB(0, g, 0)
  Case Is = "b"
  Picture2.PSet (i, j), RGB(0, 0, b)
  Case Is = "c"
  Picture2.PSet (i, j), RGB(r, g, b)
  End Select
Next j
Next i
Picture2.Refresh
End Sub
根据text1.text决定显示r,g,b通道或彩色

你应该用强度分层法来显示伪彩色。比如把灰度分为n级,每一级采用一种颜色。

大开眼界
2015-04-22 16:12
风吹过b
Rank: 20Rank: 20Rank: 20Rank: 20Rank: 20
等 级:贵宾
威 望:364
帖 子:4947
专家分:30084
注 册:2008-10-15
收藏
得分:0 
你应该这样做。
img = GetPixel(hdc1, x, y)
这里是读出亮度代码,然后这个亮度值,应该是从 0 - 255
亮度公式
0.299*红+0.587*绿+0.114*蓝=亮度(0-255)
直接读出来的值,如果大于 255 的,那说明读到仍然是 RGB 代码,需要 按三个字节去区分。

如果你照这个亮度去直接转换一个线性颜色,那得得到了肯定无法有强度的区别了。

要么就把这 0-255 ,分成如64级或32级,然后显示出来。
如 0-3 ,=0
   4-7   =4
这种的分级。

授人于鱼,不如授人于渔
早已停用QQ了
2015-04-22 16:20
lianyicq
Rank: 12Rank: 12Rank: 12
等 级:贵宾
威 望:26
帖 子:737
专家分:3488
注 册:2013-1-26
收藏
得分:0 
源是灰度图像,R、G、B值是相等的。取一个就可以计算灰度等级。

大开眼界
2015-04-22 16:28
张live
Rank: 1
等 级:新手上路
帖 子:9
专家分:0
注 册:2015-4-22
收藏
得分:0 
大神,您上边给出的代码应该就是说的直接提取的r值然后显示的吧,那您说的强度分层法是指什么,大概意思就中,我还是初学,谢谢您
2015-04-22 16:31
张live
Rank: 1
等 级:新手上路
帖 子:9
专家分:0
注 册:2015-4-22
收藏
得分:0 
回复 4楼 lianyicq
大神,您上边给出的代码应该就是说的直接提取的r值然后显示的吧,那您说的强度分层法是指什么,大概意思就中,我还是初学,谢谢您
2015-04-22 16:37
张live
Rank: 1
等 级:新手上路
帖 子:9
专家分:0
注 册:2015-4-22
收藏
得分:0 
回复 5楼 风吹过b
如果按照您说的那样分级的话,像素丢失会不会比较严重呢?
2015-04-22 16:37
lianyicq
Rank: 12Rank: 12Rank: 12
等 级:贵宾
威 望:26
帖 子:737
专家分:3488
注 册:2013-1-26
收藏
得分:0 
回复 8楼 张live
伪彩色本来就不反映真实颜色。
我上的代码是估计你就是这样考虑的。那只是显示RGB的三个独立通道。
灰度一般是1个字节存储。分为256级。如果采用强度分层,只用四色,比如红,黄,绿,蓝。
那么以0~63的灰度值用红色代替
64~127的灰度值用黄色代替
以此类推。
看看一张灰度图片,按强度分为五色的效果
图片附件: 游客没有浏览图片的权限,请 登录注册


[ 本帖最后由 lianyicq 于 2015-4-22 16:49 编辑 ]

大开眼界
2015-04-22 16:46
快速回复:把灰度图转换为单色假彩色图像,要有强度区别,这样代码对么
数据加载中...
 
   



关于我们 | 广告合作 | 编程中国 | 清除Cookies | TOP | 手机版

编程中国 版权所有,并保留所有权利。
Powered by Discuz, Processed in 0.049206 second(s), 8 queries.
Copyright©2004-2024, BCCN.NET, All Rights Reserved