MFC怎样获取屏幕指定区域像素值并与选定值进行比对

weixin_41810434 2018-10-06 04:02:07
加精
MFC怎样获取屏幕指定区域图像像素值并与指定值进行比对,然后计数读出来
...全文
4282 10 打赏 收藏 转发到动态 举报
AI 作业
写回复
用AI写文章
10 条回复
切换为时间正序
请发表友善的回复…
发表回复
Pao Pao 2019-02-12
  • 打赏
  • 举报
回复
多谢各位大神的指导
胡扯犊子 2019-02-02
  • 打赏
  • 举报
回复
新人报道,多多关照
fukanddo_li 2019-01-26
  • 打赏
  • 举报
回复
仅仅读取像素用Getpixel就可以,如果还要做伪深度比较,那就复杂了
weixin_41810434 2018-10-23
  • 打赏
  • 举报
回复
怎样取消结贴
smwhotjay 2018-10-08
  • 打赏
  • 举报
回复
估计你要做图片特征比较。外挂辅助什么的需要,
xiaohuh421 2018-10-08
  • 打赏
  • 举报
回复
一般流程是取得桌面窗口句柄, 再获取对应的DC, 然后就可以获取指定区域的图像信息了. 然后要如保处理, 都可以了. 参考例子: 百度搜索: 屏幕截图.
weixin_41810434 2018-10-08
  • 打赏
  • 举报
回复
将你需要的【指定区域】BitBlt到内存DC,然后进行分析(直接分析或借助Opencv或其他图像处理模块)能不写一些实现若能的代码
schlafenhamster 2018-10-08
  • 打赏
  • 举报
回复
"获取屏幕指定区域像素值"
GetPixel()
worldy 2018-10-08
  • 打赏
  • 举报
回复
将你需要的【指定区域】BitBlt到内存DC,然后进行分析(直接分析或借助Opencv或其他图像处理模块)
schlafenhamster 2018-10-08
  • 打赏
  • 举报
回复
参考

// "bmp"
void CBmpColorsDlg::OnButton1()
{
CWaitCursor wait;
CRect rect;
//
GetClientRect(&rect);
CDC *pDc = GetDC();
CDC dcMem;
dcMem.CreateCompatibleDC(pDc);
dcMem.SelectObject(&m_img);//
pDc->BitBlt(0,0,m_bmWidth,m_bmHeight,&dcMem,0,0,SRCCOPY);
//get all colors
std::vector<COLORREF> colorIndex;
for (int y = 0; y < m_bmHeight; y++)
{
for (int x = 0; x < m_bmWidth; x++)
{
COLORREF rgb = dcMem.GetPixel(x, y);
colorIndex.push_back(rgb);
}
}
//统计各种颜色数量
int Total = colorIndex.size();// m_bmHeight * m_bmWidth=253,760;
// afxDump << Total << " Total\n";
std::vector<ListData> list;
ListData temp(colorIndex[0], 0);// start from 0
list.push_back(temp);//[0]=0xFEFEFE;len=4069
// 颜色数据分析统计
int N = 1;
for (int i = 0; i < Total; i++) // if i=1;len=4068 wrong !
{// 取出每个 colorIndex[i],看是不是与 N 个 list[j].color 的一个相等
for (int j = 0; j < N; j++)
{
if (colorIndex[i] == list[j].color) // when i=0, ==
{
list[j].num++;
break;// next i
}
if (j == N - 1)
{// 如果 不相等 ,而且是 colorIndex 最后一个,则这个 colorIndex 加入到 list中
ListData temp(colorIndex[i], 1);// start from 1
list.push_back(temp);
N++ ; // 下次 for i < Total 时,多一个 list[j].color
break;// must ! otherwise ; Size != Total
}
}
}
//
CString num;
int numMax=0;
CString color;
int Size=0;
int colors=list.size();
m_ListBox.ResetContent();
for(int jj=0;jj<colors;jj++)
{
color.Format("0x%06X ",list[jj].color);
Size += list[jj].num;
if(numMax < list[jj].num ) numMax=list[jj].num;
num.Format("%d",list[jj].num);
m_ListBox.AddString(color+num);
}
color.Format("%d %d",colors-1,Size);
m_ListBox.AddString(color);
// 66843 - 66612=231
if(Size != Total ) AfxMessageBox ("Lost something ?");
TRACE1("%d",numMax);// 6215
// draw Histogram x color, y num
// double kY=200.0/numMax;
// x
//#define top 500
//#define lft 20
// pDc->MoveTo(lft,top);
// pDc->LineTo(lft+300,top);
// for(int kk=0; kk < colors ;kk++)
// {
// pDc->MoveTo(lft+kk,top);
// pDc->LineTo(lft+kk,top-(int)(list[kk].num*kY));
// }
ReleaseDC(pDc);
}

19,471

社区成员

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

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