Skip to content
Snippets Groups Projects
Commit 0e051ff5 authored by simon.fanetti's avatar simon.fanetti
Browse files

add app

parents
No related branches found
No related tags found
No related merge requests found
Makefile 0 → 100644
API_PATH=../ar_sanbox_lib
CFLAGS=-std=c++11 -Wall -Wextra -g
OPENCVFLAG=`pkg-config --libs --cflags opencv`
CAMERAFLAG=-lrealsense2
CCP=g++
app: app.o
$(CCP) $(OPENCVFLAG) $(CAMERAFLAG) -L$(API_PATH) -lsandbox $^ -o $@
%.o: %.cpp
$(CCP) $(CFLAGS) -I$(API_PATH)/includes -c $< -o $@
clean:
rm -f *.o app
app.cpp 0 → 100644
#include "sandbox.h"
#include <numeric>
#include <fstream>
#include <string>
#include <opencv2/opencv.hpp>
using namespace std;
using namespace cv;
#define ESCAPE_CHAR 27
Sandbox client;
Mat coloredFrame(Mat frameDepth)
{
Mat depthFrameColored(frameDepth.size(), CV_8U);
int width = frameDepth.cols, height = frameDepth.rows;
static uint32_t histogram[0x10000];
memset(histogram, 0, sizeof(histogram));
for (int i = 0; i < height; ++i)
{
for (int j = 0; j < width; ++j)
{
++histogram[frameDepth.at<ushort>(i, j)];
}
}
for (int i = 2; i < 0x10000; ++i)
histogram[i] += histogram[i - 1]; // Build a cumulative histogram for the indices in [1,0xFFFF]
for (int i = 0; i < height; ++i)
{
for (int j = 0; j < width; ++j)
{
if (uint16_t d = frameDepth.at<ushort>(i, j))
{
int f = histogram[d] * 255 / histogram[0xFFFF]; // 0-255 based on histogram location
depthFrameColored.at<uchar>(i, j) = static_cast<uchar>(f);
}
else
{
depthFrameColored.at<uchar>(i, j) = 0;
}
}
}
bitwise_not(depthFrameColored, depthFrameColored); //reverse colormap
applyColorMap(depthFrameColored, depthFrameColored, cv::COLORMAP_JET);
depthFrameColored.setTo(cv::Scalar(0, 0, 0), (frameDepth == 0));
return depthFrameColored;
}
void showLevel()
{
char windowName[] = "Sandbox";
Mat frameData;
client.getDepthFrame().copyTo(frameData);
Mat colored;
do
{
client.getDepthFrame().copyTo(frameData);
colored = coloredFrame(frameData);
client.showImage(&colored);
} while (waitKey(10) != ESCAPE_CHAR);
destroyAllWindows();
}
/*
void showDiff(Mat frameBase)
{
Mat frameData;
client.getDepthFrame(&frameData);
resize(frameBase, frameBase, frameData.size()); //to match with camera frame
Mat diff(frameData.size(), CV_16S);
Mat frameColor(frameData.size(), CV_8UC3, Scalar(0, 0, 0));
int toBlue[] = {0, 2};
int toRed[] = {0, 0};
int keyCode;
do
{
client.getDepthFrame(&frameData);
subtract(frameBase, frameData, diff, noArray(), CV_16S);
Mat isNeg = diff < -5;
Mat isPos = diff > 5;
//colorize red & blue
mixChannels(&isNeg, 1, &frameColor, 1, toBlue, 1);
mixChannels(&isPos, 1, &frameColor, 1, toRed, 1);
client.showImage(frameColor);
keyCode = waitKey(10);
} while (keyCode!= ESCAPE_CHAR);
destroyAllWindows();
}
vector<int> findCercleZ(Mat &rgb)
{
Mat src_gray;
cvtColor(rgb, src_gray, CV_BGR2GRAY);
/// Reduce the noise so we avoid false circle detection
GaussianBlur(src_gray, src_gray, Size(9, 9), 2, 2);
vector<Vec3f> circles;
circles.clear();
/// Apply the Hough Transform to find the circles
//source, output, method, inverse ratio of resolution, Minimum distance between detected centers, threeshold canny, threeshold center, min radius, max radius
HoughCircles(src_gray, circles, CV_HOUGH_GRADIENT, 1, src_gray.rows / 4, 75, 50, 0, 0);
//doit tester si le cercle est bon (rayon);
vector<int> result;
if (!circles.empty())
{
for (int i = 0; i < 3; i++)
{
result.push_back(round(circles[0][i]));
}
}
return result;
}
void trackCircle()
{
Mat frameRGB;
client.getRGBFrame(&frameRGB);
Mat frameColor(frameRGB.size(), CV_8UC3, Scalar(0, 0, 0));
do
{
client.getRGBFrame(&frameRGB);
vector<int> cercle = findCercleZ(frameRGB);
if (!cercle.empty())
{
Point circlePosition(cercle[0], cercle[1]);
cv::circle(frameColor, circlePosition, 3, Scalar(0, 255, 0), -1, 8, 0); // point without transformation
cout << circlePosition.x << "x" << circlePosition.y << endl;
}
client.showImage(frameColor);
frameColor.setTo(Scalar(0,0,0));
} while (waitKey(100) != ESCAPE_CHAR);
destroyAllWindows();
}*/
int main(int argc, char *argv[])
{
if (argc != 3)
{
printf("Usage : %s <addr_ip> <port>\n", argv[0]);
exit(1);
}
//client = Sandbox(argv[1], atoi(argv[2]));
client = Sandbox();
cout << "Press: \n 0: Show difference \n 1: Show level \n";
int f = 0;
cin >> f;
if (f == 0)
{
//Mat frameData;
//client.getDepthFrame(&frameData);
//showDiff(frameData);
}
else if (f == 1)
showLevel();
}
\ No newline at end of file
0% Loading or .
You are about to add 0 people to the discussion. Proceed with caution.
Please register or to comment