opencv问题,我在提取图像的轮廓,有提取轮廓的现成函数,我现在是想提取两个灰度级之间的图像

这是灰度级为190时的图,这是灰度级为170时的图像,就是这两个图像相减得到的图像,怎么显示170-190之间的图像呢,下面是用的提取代码:#include<cv.h>#... 这是灰度级为190时的图,
这是灰度级为170时的图像,就是这两个图像相减得到的图像,怎么显示170-190之间的图像呢,
下面是用的提取代码:
#include <cv.h>#include <highgui.h>
int g_threshold=1;
IplImage* src=cvLoadImage("F:\\originalimagetest\\18.bmp",0);
void on_trackbar(int pos)
{
IplImage *dst=cvCreateImage(cvGetSize(src),src->depth,src->nChannels);
CvMemStorage* storage=cvCreateMemStorage(0);
CvSeq *seq=NULL;
cvThreshold(src,dst,pos,255,CV_THRESH_BINARY);
//cvAdaptiveThreshold(src,dst,255,CV_ADAPTIVE_THRESH_MEAN_C, CV_THRESH_BINARY_INV, 3, 5);
cvFindContours(dst,storage,&seq);cvDrawContours(dst,seq,cvScalarAll(255),cvScalarAll(255),100);
cvShowImage("binary image",dst);
cvReleaseImage(&dst);
cvClearMemStorage(storage);
}
int main()
{
cvNamedWindow("source image",1);
cvShowImage("source image",src);
cvNamedWindow("binary image",1);
cvCreateTrackbar("slider","binary image",&g_threshold,255,on_trackbar);
on_trackbar(g_threshold);
cvWaitKey(0);
cvReleaseImage(&src);
cvDestroyAllWindows();
return 0;
}
展开
 我来答
whu10080
推荐于2016-01-22 · TA获得超过340个赞
知道小有建树答主
回答量:86
采纳率:0%
帮助的人:91.6万
展开全部
其实你问的问题可以转化为二值化问题,你的要求是将灰度级在170~190之间的像素置为白,其他灰度级像素置为黑,然后再在二值化图像上进行轮廓提取,那这样就好办了,二值化函数如下:
简单的方法就是自己写一个threshlod函数
int thrl(IplImage *src,IplImage *dst,int a1,int a2)//a1小于a2,即为所要求的170和190
{
for(int i=0;i<src->width;i++)
for(int j=0;j<src->height;j++)
{
int pixel=((uchar*)(src->imageData + src->widthStep*j))[i];
if(pixel>a1&&pixel<a2)
((uchar*)(dst->imageData + dst->widthStep*j))[i]=255;
else ((uchar*)(dst->imageData + dst->widthStep*j))[i]=0;
}
}
推荐律师服务: 若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询

为你推荐:

下载百度知道APP,抢鲜体验
使用百度知道APP,立即抢鲜体验。你的手机镜头里或许有别人想知道的答案。
扫描二维码下载
×

类别

我们会通过消息、邮箱等方式尽快将举报结果通知您。

说明

0/200

提交
取消

辅 助

模 式