Ask Your Question

Revision history [back]

click to hide/show revision 1
initial version

After subraction of 4 neighbor pixels always give zero

I am trying to take difference of center pixel with 4 neighbor and add them and then replace the original with that difference value. but it always replace pixel with zero. I don't what i am doing wrong. thanks for any help

// newproject.cpp : Defines the entry point for the console application.

#include "stdafx.h"
#include "highgui.h"
#include <stdio.h>
#include <cv.h>
#include <highgui.h>
#include <stdio.h>
#include <conio.h>
#include <opencv2/imgproc/imgproc.hpp>  // Gaussian Blur
#include <opencv2/core/core.hpp>        // Basic OpenCV structures (cv::Mat, Scalar)
#include <opencv2/highgui/highgui.hpp>
#include <iostream>
#include <conio.h>     using namespace cv;
 using namespace std;

  class frameprocessing{

  Mat hsv_base;
  MatND hist_base;

  public:
  void whatever(Mat Frame)
  {
    for(int i=0;i<Frame.cols;i++)
        for(int j=0;j<Frame.rows;j++)
        {
            if(i==0&&j==0)
            {

            //  cout<<"Check 1"<<endl;
                Frame.at<Vec3b>(j,i)=(Frame.at<Vec3b>(j,i)-(Frame.at<Vec3b>(j+1,i))+(Frame.at<Vec3b>(j,i)-Frame.at<Vec3b>(j,i+1))+(Frame.at<Vec3b>(j,i)-Frame.at<Vec3b>(j+1,i))+(Frame.at<Vec3b>(j,i)-Frame.at<Vec3b>(j,i+1)));

                Frame.at<Vec3b>(j,i)=(Frame.at<Vec3b>(j,i))[0]/4;
                Frame.at<Vec3b>(j,i)=(Frame.at<Vec3b>(j,i))[1]/4;
                Frame.at<Vec3b>(j,i)=(Frame.at<Vec3b>(j,i))[2]/4;

            }
            else if(i==Frame.cols-1&&j==Frame.rows-1)
            {
            //  cout<<"Check 2"<<endl;
                Frame.at<Vec3b>(j,i)=((Frame.at<Vec3b>(j-1,i)-Frame.at<Vec3b>(j,i))+(Frame.at<Vec3b>(j,i-1)+Frame.at<Vec3b>(j,i))+(Frame.at<Vec3b>(j-1,i)-Frame.at<Vec3b>(j,i))+(Frame.at<Vec3b>(j,i-1)+Frame.at<Vec3b>(j,i)));
                Frame.at<Vec3b>(j,i)=(Frame.at<Vec3b>(j,i))[0]/4;
                Frame.at<Vec3b>(j,i)=(Frame.at<Vec3b>(j,i))[1]/4;
                Frame.at<Vec3b>(j,i)=(Frame.at<Vec3b>(j,i))[2]/4;
            }
            else if(i==Frame.cols-1&&j==0)
            {
                                      //cout<<"Check 3"<<endl;
                Frame.at<Vec3b>(j,i)=((Frame.at<Vec3b>(j+1,i)-Frame.at<Vec3b>(j,i))+(Frame.at<Vec3b>(j,i-1)+Frame.at<Vec3b>(j,i))+(Frame.at<Vec3b>(j+1,i)-Frame.at<Vec3b>(j,i))+(Frame.at<Vec3b>(j,i-1)+Frame.at<Vec3b>(j,i)));
                Frame.at<Vec3b>(j,i)=(Frame.at<Vec3b>(j,i))[0]/4;
                Frame.at<Vec3b>(j,i)=(Frame.at<Vec3b>(j,i))[1]/4;
                Frame.at<Vec3b>(j,i)=(Frame.at<Vec3b>(j,i))[2]/4;
            }
            else if(i==0&&j==Frame.rows-1)
            {
            //  cout<<"Check 4"<<endl;
                Frame.at<Vec3b>(j,i)=((Frame.at<Vec3b>(j-1,i)-Frame.at<Vec3b>(j,i))+(Frame.at<Vec3b>(j,i+1)+Frame.at<Vec3b>(j,i))+(Frame.at<Vec3b>(j-1,i)-Frame.at<Vec3b>(j,i))+(Frame.at<Vec3b>(j,i+1)+Frame.at<Vec3b>(j,i)));
                Frame.at<Vec3b>(j,i)=(Frame.at<Vec3b>(j,i))[0]/4;
                Frame.at<Vec3b>(j,i)=(Frame.at<Vec3b>(j,i))[1]/4;
                Frame.at<Vec3b>(j,i)=(Frame.at<Vec3b>(j,i))[2]/4;
            }
            else if(i==0)
            {
        //      cout<<"Check 5"<<endl;
                Frame.at<Vec3b>(j,i)=((Frame.at<Vec3b>(j+1,i)-Frame.at<Vec3b>(j,i))+(Frame.at<Vec3b>(j,i+1)-Frame.at<Vec3b>(j,i))+(Frame.at<Vec3b>(j,i+1)-Frame.at<Vec3b>(j,i))+((Frame.at<Vec3b>(j-1,i)-Frame.at<Vec3b>(j,i))));
                Frame.at<Vec3b>(j,i)=(Frame.at<Vec3b>(j,i))[0]/4;
                Frame.at<Vec3b>(j,i)=(Frame.at<Vec3b>(j,i))[1]/4;
                Frame.at<Vec3b>(j,i)=(Frame.at<Vec3b>(j,i))[2]/4;

            }
            else if(j==0)
            {
        //      cout<<"Check 6"<<endl;
                Frame.at<Vec3b>(j,i)=((Frame.at<Vec3b>(j+1,i)-Frame.at<Vec3b>(j,i))+(Frame.at<Vec3b>(j+1,i)-Frame.at<Vec3b>(j,i))+(Frame.at<Vec3b>(j,i+1)-Frame.at<Vec3b>(j,i)+(Frame.at<Vec3b>(j,i-1)-Frame.at<Vec3b>(j,i))));
                Frame.at<Vec3b>(j,i)=(Frame.at<Vec3b>(j,i))[0]/4;
                Frame.at<Vec3b>(j,i)=(Frame.at<Vec3b>(j,i))[1]/4;
                Frame.at<Vec3b>(j,i)=(Frame.at<Vec3b>(j,i))[2]/4;
            }
            else if(i==Frame.cols-1)
            {
        //      cout<<"Check 7"<<endl;
                Frame.at<Vec3b>(j,i)=((Frame.at<Vec3b>(j+1,i)-Frame.at<Vec3b>(j,i))+(Frame.at<Vec3b>(j-1,i)-Frame.at<Vec3b>(j,i))+((Frame.at<Vec3b>(j,i-1)-Frame.at<Vec3b>(j,i)))+((Frame.at<Vec3b>(j,i-1)-Frame.at<Vec3b>(j,i))));
                Frame.at<Vec3b>(j,i)=(Frame.at<Vec3b>(j,i))[0]/4;
                Frame.at<Vec3b>(j,i)=(Frame.at<Vec3b>(j,i))[1]/4;
                Frame.at<Vec3b>(j,i)=(Frame.at<Vec3b>(j,i))[2]/4;

            }
            else if(j==Frame.rows-1)
            {
        //      cout<<"Check 8"<<endl;

                Frame.at<Vec3b>(j,i)=((Frame.at<Vec3b(j,i+1)-Frame.at<Vec3b>(j,i))+(Frame.at<Vec3b>(j-1,i)-Frame.at<Vec3b>(j,i))+(Frame.at<Vec3b>(j-1,i)-Frame.at<Vec3b>(j,i))+((Frame.at<Vec3b>(j,i-1)-Frame.at<Vec3b>(j,i))));
                Frame.at<Vec3b>(j,i)=(Frame.at<Vec3b>(j,i))[0]/4;
                Frame.at<Vec3b>(j,i)=(Frame.at<Vec3b>(j,i))[1]/4;
                Frame.at<Vec3b>(j,i)=(Frame.at<Vec3b>(j,i))[2]/4;
            }
            else
            {

                Frame.at<Vec3b>(j,i)=((Frame.at<Vec3b>(j-1,i)-Frame.at<Vec3b>(j,i))+(Frame.at<Vec3b>(j+1,i)-Frame.at<Vec3b>(j,i))+(Frame.at<Vec3b>(j,i+1)-Frame.at<Vec3b>(j,i))+(Frame.at<Vec3b>(j,i-1)+Frame.at<Vec3b>(j,i)));
                Frame.at<Vec3b>(j,i)=(Frame.at<Vec3b>(j,i))[0]/4;
                Frame.at<Vec3b>(j,i)=(Frame.at<Vec3b>(j,i))[1]/4;
                Frame.at<Vec3b>(j,i)=(Frame.at<Vec3b>(j,i))[2]/4;
                Vec3d value = Frame.at<Vec3b>(j,i);
                cout<<value[0]<<endl;
                cout<<value[1]<<endl;
                cout<<value[2]<<endl;
            }   
        }
        //hell(Frame);
}

}; class video{

Mat frame;
string filename;
double dWidth;
double dHeight;

public: video() {

}

video(string videoname)
{
    vector<Mat> videoframes;
    filename = videoname;
    VideoCapture capture(filename); 

    if( !capture.isOpened() )
    {
        exit(0);
    }

    dWidth   = capture.get(CV_CAP_PROP_FRAME_WIDTH); //get the width of frames of the video
    dHeight = capture.get(CV_CAP_PROP_FRAME_HEIGHT); //get the height of frames of the video
    frameprocessing obj;

    for( ; ; )
    {
        capture >> frame;
        if(frame.empty())
            break;

//      Mat tmp=frame.clone();
        obj.whatever(frame);
//      obj.hsv_histogram(frame);
//      videoframes.push_back(tmp);
    }
    //displayvideo(videoframes);
    //writer(videoframes);
}

};

int _tmain(int argc, _TCHAR* argv[]) { video obj("video.avi");