单色背景图扣象及两图透明合成问题,向高手求教.

very_boy 2003-07-28 04:32:58
我用VB,编程中碰到两个问题:
1.拖动一个image控件中的picture画到到一个picturebox的图片上,希望image图象背景透明,怎么实现呀?
2.一个picturebox的picture背景色是单色的,如何把其中的人物像自动取出画到另一picturebox的picture中啊?

想必对你们来说不是什么难题,请高手指教!
...全文
72 26 打赏 收藏 转发到动态 举报
AI 作业
写回复
用AI写文章
26 条回复
切换为时间正序
请发表友善的回复…
发表回复
very_boy 2003-08-08
  • 打赏
  • 举报
回复
谁知道比较好的数字图像处理书籍下载URL? 谢谢 :)
realizedream 2003-08-07
  • 打赏
  • 举报
回复
晕倒,你还是去看书吧
very_boy 2003-08-07
  • 打赏
  • 举报
回复
不好意思,最近才开始研究图形方面的东西,有些术语不是很清楚,HSI是指?Change H的算法是什么?谢谢.
realizedream 2003-08-06
  • 打赏
  • 举报
回复
Image Processing, Analysis, and Machine Vision
or
Digital Image Processing by Kenneth R. Castleman

RGB->HSI, then you change the H
very_boy 2003-08-06
  • 打赏
  • 举报
回复
To realizedream(-273.15℃):
你说的很有道理,在VB中申请大的连续控件老是会报错 :(

准备用.net来试试...有空再去买本数字图像处理的书(有没有可以推荐的书?)
如果选用C#.net,它的graphics类库能达到前面的这些功能吗?.net中申请连续大空间应该不会有什么问题吧?
另外如果我让用户选择一个颜色ColSel,怎么样让图片的主色调变成所选的颜色呢?有人有这种算法吗?

karach 2003-08-04
  • 打赏
  • 举报
回复
好多学习的地方
realizedream 2003-08-04
  • 打赏
  • 举报
回复
你的问题太简单了
想一想,你用数组来表示这个图像
32位图的图像
这个数组占的空间就是1024*768*4*你定义的数组类型的位数

想一想,VB会给你这么大的连续空间嘛?

缩小?你怎么缩小?如果不是1/4,1/16……缩小,你就必须用三次插值等等,缩小了,会不会打印有问题,你说呢?呵呵,打印A4精度一般都是2000*1500的精度,1024*768顶多打7寸照片。
realizedream 2003-08-04
  • 打赏
  • 举报
回复
尺有所短,寸有所长!
做图像处理不等于编程,就算你程序写得再好,没有数字图像处理的基础,照样做不好。
photoshop不是几个人想就想得出来的,你又何必难为自己呢。

到最后,你会发现你自己做出来这个软件花费的代价和时间远远超过别人开的价格,毕竟别人做这方面很久了,都有自己的源代码库的。

好自为之!
very_boy 2003-08-04
  • 打赏
  • 举报
回复
To realizedream:
这是我一个朋友想做的,本来想找别人做,可是开的价格都好贵,想想还是自己琢磨琢磨,帮朋友省点钱也好.
我这一段时间研究下来确实感觉VB图形方面功能太弱.

碰到另一问题,如果图片大于1024*768,我发现处理起来有问题,容易有overflow等错误.有人对这种大型图象处理有过研究吗?如果对它缩小后编辑,按原样大小打印会有问题吗?
realizedream 2003-08-01
  • 打赏
  • 举报
回复
至于聚类算法,书很少,大多是文献
realizedream 2003-08-01
  • 打赏
  • 举报
回复
呵呵,既然你用的是.net那就没有必要用API函数了,.net的GDI+图像处理功能已经很强大了,我以前看过一片老外写过的文章,就是讲VB.net读取图像和处理图像的方法,放心绝对不是getpixel和setpixel,因为我VB.net没有怎么用过,所以这方面没有留心,当时的源代码也没有弄下来:(

边检算子的方法很多,都有缺陷,建议你去看一本老外写的image processing analysis and machine pattern recognition,写得很简单,而且大量的算法都有,只是没有中文版:(

国内这类的书写的都属于抽象派的……

看到你另外一个帖子,你不是要把这个程序包出去吗?怎么你又要自己做了?
very_boy 2003-08-01
  • 打赏
  • 举报
回复
realizedream:
不好意思,我最近才开始研究图象方面的处理,单色抠图我已经做出来了,但是就像你说的,衣服中的和背景色相同的颜色也被我过滤掉了.
你所说的边界算子或聚类算法什么的我没什么idea,能说的稍微具体点吗?我让我有个方向.有没有这方面的资料下载,我还是想研究一下.
另外,在vb中用它自带的图象处理功能,处理起来确实很慢,但是用API的话,我测试下来,速度也很快.
realizedream 2003-07-31
  • 打赏
  • 举报
回复
看样子,以后有你郁闷的时候了
realizedream 2003-07-31
  • 打赏
  • 举报
回复
呵呵,如果你只是去除与背景颜色相同的颜色的话,非常简单,直方图就可以,
但是你要考虑人的衣服中肯定会有和背景相同的颜色

所以,你要用边界算子来处理这些问题,虽然效果不怎么样:(
做彩色图像的话,你可以考虑用聚类算法,效果不错

如果你没有数字信号处理的基础的话,估计你会做的很郁闷的,推荐你去看一些这方面的书,虽然看这些书也是比较痛苦的:)不过对你有好处
very_boy 2003-07-31
  • 打赏
  • 举报
回复
谢谢buluesky
我在VB中用了api
Dim bi24BitInfo As BITMAPINFO, bBytes() As Byte, Cnt As Long
With bi24BitInfo.bmiHeader
.biBitCount = 24
.biCompression = BI_RGB
.biPlanes = 1
.biSize = Len(bi24BitInfo.bmiHeader)
.biWidth = Picture1.ScaleWidth + 1
.biHeight = Picture1.ScaleHeight + 1
End With
ReDim bBytes(1 To bi24BitInfo.bmiHeader.biWidth * bi24BitInfo.bmiHeader.biHeight * 3) As Byte
iDC = CreateCompatibleDC(Picture1.hdc)
iBitmap = CreateDIBSection(iDC, bi24BitInfo, DIB_RGB_COLORS, ByVal 0&, ByVal 0&, ByVal 0&)
SelectObject iDC, iBitmap
BitBlt iDC, 0, 0, bi24BitInfo.bmiHeader.biWidth, bi24BitInfo.bmiHeader.biHeight, Picture1.hdc, 0, 0, vbSrcCopy
GetDIBits iDC, iBitmap, 0, bi24BitInfo.bmiHeader.biHeight, bBytes(1), bi24BitInfo, DIB_RGB_COLORS
For Cnt = LBound(bBytes) To UBound(bBytes)
此处该用什么算法把背景颜色过滤掉呢???????????????
Next Cnt

SetDIBitsToDevice Picture2.hdc, 0, 0, bi24BitInfo.bmiHeader.biWidth, bi24BitInfo.bmiHeader.biHeight, 0, 0, 0, bi24BitInfo.bmiHeader.biHeight, bBytes(1), bi24BitInfo, DIB_RGB_COLORS
DeleteDC iDC
DeleteObject iBitmap
Picture2.Refresh
very_boy 2003-07-30
  • 打赏
  • 举报
回复
速度确实很慢,可是如果不用SetPixel等函数,一般对图片处理都用哪些函数,速度比较快呢?
BlueSky2008 2003-07-30
  • 打赏
  • 举报
回复
CreateDibSection,可以直接得到图像数据区的指针,在内存中直接修改图像数据,是gdi中操作图片最快的了。不过我不懂vb,不知道这个函数在vb中好不好用。
BlueSky2008 2003-07-30
  • 打赏
  • 举报
回复
CreateDibSection,可以直接得到图像数据区的指针,在内存中直接修改图像数据,是gdi中操作图片最快的了。不过我不懂vb,不知道这个函数在vb中好不好用。
realizedream 2003-07-30
  • 打赏
  • 举报
回复
呵呵,对VB不熟,不了解,我用C++,C#都做过图像类处理,用的都是指针,不知道VB怎么弄,VB好像不直接支持指针
BlueSky2008 2003-07-29
  • 打赏
  • 举报
回复
把你希望透明的部分的颜色设成透明色就行了。
加载更多回复(6)

4,499

社区成员

发帖
与我相关
我的任务
社区描述
图形图像/机器视觉
社区管理员
  • 机器视觉
  • 迪菲赫尔曼
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧