如何求一帧二值图像上最左最右最上最下的坐标点,欢迎各位批评指正
来源:互联网 发布:getscript 获得js源码 编辑:程序博客网 时间:2024/05/22 17:32
最近在做毕业设计,需要求出一帧二值图像上最左最右最上最下的坐标值。想到的一个方法如下(附上代码注释):
//灰度值为255点的点,取图像上的白点,白点以外的点,像素值为0
//图像是以左下角为坐标原点,横轴是X轴,竖轴是Y轴。注意下面四个值的设置
int xmin = pFrImg->width;
int ymin = pFrImg->height;
int xmax = 0;
int ymax = 0;
//下面是逐行扫描像素点,从左至右,从下到上(注意原点在左下角)
for (size_t row = 0; row<pFrImg->height; row++)
{
unsigned char * ptr = (unsigned char*)pFrImg->imageData+row*pFrImg- >width;//每一行数据
for (size_t cols = 0 ; cols<pFrImg->width; cols++)
{
if ( ptr[cols] == 255)
{
if (row <= ymin)
{
ymin = row;
}
if (cols <= xmin)
{
xmin = cols;
}
if (row >= ymax)
{
ymax = row;
}
if (cols > xmax)
{
xmax = cols;
}
}
}
}
int width = abs(xmax - xmin)+10;//矩形的宽高
int height = abs(ymax - ymin)+10;
printf("xmin = %d\n", xmin);//有助于观察各值变化情况
printf("xmax = %d\n", xmax);
printf("ymin = %d\n", ymin);
printf("ymax = %d\n", ymax);
printf("width = %d\n", width);
printf("height = %d\n", height);
printf("\n****************************************\n");
cvRectangle( pFrame, cvPoint(xmin,ymin), //在原视频中画矩形框
cvPoint(xmin + width, ymin+ height),
CV_RGB(255,0,0), 2, CV_AA,0);*/
cvRectangle(src, cvPoint(xmin,ymin), //在二值图像中画框框
cvPoint(xmin + width, ymin+ height),
CV_RGB(255,255,255), 2, CV_AA,0);
**********************************************************************
上面是按行扫描,如果是按列扫描,方法如下(贴上代码):
int step = pFrImg->widthStep/sizeof(uchar);//每一行像素个数。第一行字节数/每个像素点所占字节
unsigned char * ptr = (unsigned char*)pFrImg->imageData;
for (size_t cols = 0 ; cols<pFrImg->width; cols++)
{
for (size_t row = 0; row<pFrImg->height; row++)
{
if ( (ptr[cols + row*step] == 255))
{
if (row <= ymin)
{
ymin = row;
}
if (cols <= xmin)
{
xmin = cols;
}
if (row >= ymax)
{
ymax = row;
}
if (cols > xmax)
{
xmax = cols;
}
}
}
}
- 如何求一帧二值图像上最左最右最上最下的坐标点,欢迎各位批评指正
- 欢迎批评指正我的博客
- 插入排序的一种实现方法,欢迎批评指正!
- CuteIE已重构为PIMShell,欢迎批评指正
- 开始写博客,欢迎大家批评指正
- 答一位网友的hostapd问题,欢迎各位指正
- 自己写的一个基于数组实现的栈,欢迎大家批评指正,共同进步
- 关于微软的OBA架构理解(欢迎大家批评指正^_^)
- 计算机中浮点数的存储方式-自己整理,欢迎大家批评指正
- 有关Flappy的实现(基本功能已经实现, 但用户体验不是很好,希望各位批评指正)
- 内部UML培训文件,欢迎大家批评指正
- 小米公司编程题1(欢迎批评指正)
- 小米公司编程题2(欢迎批评指正)
- Java日期,日期格式,历法的小总结(菜鸟的我学习Java,欢迎批评指正哦)
- 剑指Offer22题栈的压入、弹出序列 java解答(如有错误欢迎批评指正)
- 在大学老师布置的一些题目,欢迎各位大佬指正(1)
- 在大学老师布置的一些题目,欢迎各位大佬指正(2)
- 在大学老师布置的一些题目,欢迎各位大佬指正(3)
- 从外部导入工程到myeclipse8.5报错:Background Indexer Crash Recovery java.lang
- android:layout_gravity和android:gravity的区别
- 分别用数组和链表实现队列
- Objective-C打僵尸代码
- Uva-1626-Brackets sequence
- 如何求一帧二值图像上最左最右最上最下的坐标点,欢迎各位批评指正
- 融合传承加创新才是互联网金融的出路
- 取消选中单选框radio的三种方式
- CodeForces 446B DZY Loves Modification
- Android 4.4(KitKat)窗口管理分系统 - 体系框架
- 链表的操作
- A20启动代码流程分析
- HDU 1000 1001 1002 1003 1004 1005(AC代码)
- 记录一下面试的过程吧~