如何在opencv中的多个范围之间进行阈值

时间:2014-03-27 15:57:03

标签: c++ opencv threshold

我是opencv的新手,我在windows7U(64位)上使用opencv2.4.5和VS10C ++。我的项目是在140到160之间的阈值处理之后显示图像,但我是最后一行的挂断

下面是我的代码;

int main( int argc, char* argv[] ) 
{
    //open the video
VideoCapture cap2(argv[2]);
if ( !cap2.isOpened() )
    {
     cout << "Cannot open the video file" << endl;
     return -1;
    }

//Threshold value of 140 to 160
    if( cap2.isOpened() )
{
    Mat frame, frame_gray, result;

    for(;;)
    {
        int n;
        int t1=140, t2=160;
        n = 255;

        cap2>>frame;
        cvtColor( frame, frame_gray, CV_BGR2GRAY );

        for (int i=0;i<frame_gray.size().height;i++)
        {
            for(int j=0;j<frame_gray.size().width;j++)
            {
                uchar val;
                val = frame_gray.at<uchar>(j,i);
                if (val>t1 &&  val<t2) 
                    {val=255;}
                else 
                    {val=0;}

                frame_gray.at<uchar>(j,i)=val;
            }

如何在流程循环多个范围阈值后显示结果?

1 个答案:

答案 0 :(得分:10)

您需要的只是inRange(),它将检查数组元素是否位于另外两个数组的元素之间。

所以将代码更改为

Mat thr;
inRange(frame_gray, Scalar(140),Scalar(160),thr);
imshow("processed",thr);
waitKey();