图片去背景再求教!

ztzxx 2017-06-02 08:45:02
加精


请教这两个图片如何去掉背景,只剩下字母?这两个图片都可以下载,是jpg的
帮忙的朋友,给出的思路最好经过验证,我研究好长时间了,用了好多方法,没有看起来那么简单,放大后会发现用了滤镜,边界和相邻区域有好多易混颜色,我只需去背景,不需分割,
黄色和橙色和图像左上角的灰很接近非常难区分,谢谢大家了
...全文
2334 43 打赏 收藏 转发到动态 举报
写回复
用AI写文章
43 条回复
切换为时间正序
请发表友善的回复…
发表回复
tiancijzx 2017-07-15
  • 打赏
  • 举报
回复
都是有软件操作的么
xiaozhu12371237 2017-07-11
  • 打赏
  • 举报
回复
我也只是路过
伊顺鸣 2017-07-07
  • 打赏
  • 举报
回复
来支持了那。。
念着倒才猪_ 2017-06-29
  • 打赏
  • 举报
回复
我只是路过路过。。。
NoEdUl 2017-06-16
  • 打赏
  • 举报
回复
当黄色边缘和背景差距不大的时候,可以考虑通过某些函数“加剧”这种差距。 过个sigmoid函数试试?
ztzxx 2017-06-08
  • 打赏
  • 举报
回复
引用 37 楼 wangyaninglm 的回复:
你应该可以分割或者细化了吧
不需要分割,只要去背景去的完美就好。
ljheee 2017-06-07
  • 打赏
  • 举报
回复
只需去背景,不需分割,应该有成熟的算法
schlafenhamster 2017-06-07
  • 打赏
  • 举报
回复
下一步 应该 是 skeleton (thinning)吧
ztzxx 2017-06-07
  • 打赏
  • 举报
回复
引用 19 楼 schlafenhamster 的回复:

void CAboutDlg::OnButton1() 
{
// 	"W.jpg" has paint in OnPaint
	CClientDC dc(this);
	CDC memDC;
	memDC.CreateCompatibleDC(&dc);
    CBitmap bmp;
	bmp.CreateCompatibleBitmap(&dc,90,32);
    CBitmap *old = memDC.SelectObject(&bmp);
// copy
    memDC.BitBlt(0,0,90,32,&dc,60,100,SRCCOPY);
#if 1 //
	OpenClipboard();
	EmptyClipboard(); 
	SetClipboardData(CF_BITMAP,bmp);
	CloseClipboard();
#endif
	for(int h=0;h<32;h++)
	{
		for(int w=0;w<90;w++)
		{
			COLORREF clr=memDC.GetPixel(w,h);
			BYTE R = (BYTE)(clr  & 0x000000FF);
			BYTE G = (BYTE)((clr & 0x0000FF00)>>8);
			BYTE B = (BYTE)((clr & 0x00FF0000)>>16);
			BYTE diff = max(abs(R-G),abs(R-B));
			//afxDump << R << ";" << G << ";" << B << "\n";
			afxDump << diff << "\n";
			if(diff < 60) memDC.SetPixel(w,h,0); 
		}
	}
 // redraw dc
	dc.BitBlt(50,100,90,32,&memDC,0,0,SRCCOPY);
	memDC.SelectObject(old);
}
看起来效果不错,如果同时把字符颜色变成(255,255,255)就会发现有一些应该去掉的没去掉,如果加大diff的值就会发现去掉了一些不应该去掉的像素,不知还有什么改进建议吗?
ztzxx 2017-06-07
  • 打赏
  • 举报
回复
引用 30 楼 wangyaninglm 的回复:
最后怎么弄好的?阈值调到多少了


域值调到50-70之间,有一定效果了,不敢要求别人太高,所以结贴了。
下面是调到60的效果。


schlafenhamster的效果是这样的


但是他没有改变字符颜色,有一些没去掉的藏在黑色背景中看不出来,放大下就看出来了,呵呵

shiter 2017-06-07
  • 打赏
  • 举报
回复
你应该可以分割或者细化了吧
ztzxx 2017-06-07
  • 打赏
  • 举报
回复
引用 34 楼 ljheee 的回复:
只需去背景,不需分割,应该有成熟的算法
请提供点线索,呵呵
ztzxx 2017-06-07
  • 打赏
  • 举报
回复
引用 33 楼 schlafenhamster 的回复:
下一步 应该 是 skeleton (thinning)吧
如果仅是太粗,才会用skeleton (thinning)比如那个W,如果执行skeleton (thinning)肯定面目全非,因为W字符中心没有挖空。
引用 34 楼 ljheee 的回复:
只需去背景,不需分割,应该有成熟的算法
见闻不多,请指教!
shiter 2017-06-06
  • 打赏
  • 举报
回复
引用 9 楼 ztzxx 的回复:
[quote=引用 7 楼 schlafenhamster 的回复:] “我研究好长时间了,用了好多方法,” 没有一句代码 ?
im=Image.open("F:/1.jpg") im=np.array(im) for i in range(0,32): for j in range(0,90): if(im[i][j][0]==im[i][j][1] and im[i][j][1]==im[i][j][2]): im[i][j]=[0,0,0] im=Image.fromarray(im) im.save("F:/000.jpg")[/quote] 问一下你这个判断三通道相等,为啥不是0==1and1==2and0==2?
赵4老师 2017-06-06
  • 打赏
  • 举报
回复
怪不得折半查找法从算法发表到实际可用的代码之间隔了好几年呢!
hugh_z 2017-06-06
  • 打赏
  • 举报
回复
666666666666666666666
jamon_tan 2017-06-06
  • 打赏
  • 举报
回复
分析图片的HVS值 再选择合适的阀值就可以过滤
nettman 2017-06-06
  • 打赏
  • 举报
回复
shiter 2017-06-06
  • 打赏
  • 举报
回复
最后怎么弄好的?阈值调到多少了
ztzxx 2017-06-06
  • 打赏
  • 举报
回复
结贴了,感谢赵4老师和schlafenhamster,他们都经过实测给出了有价值的建议,也感谢其它关注的朋友,还有版主的推荐,分有限,分不过来了,大家见谅!再次感谢大家!
加载更多回复(23)

19,468

社区成员

发帖
与我相关
我的任务
社区描述
VC/MFC 图形处理/算法
社区管理员
  • 图形处理/算法社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

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