我是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;
}
如何在流程循环多个范围阈值后显示结果?
答案 0 :(得分:10)
您需要的只是inRange(),它将检查数组元素是否位于另外两个数组的元素之间。
所以将代码更改为
Mat thr;
inRange(frame_gray, Scalar(140),Scalar(160),thr);
imshow("processed",thr);
waitKey();