Giter Club home page Giter Club logo

visioncpp's Introduction



Overview

VisionCpp is a lightweight header-only library for computer vision and image processing. The aim of the library is to provide a toolbox that enables performance portability for heterogeneous platforms using modern C++.

Written using SYCL 1.2.1 and compiled/tested with ComputeCpp to accelerate vision code using OpenCL devices.

Table of contents

Integration

You will need to install ComputeCpp in order to use VisionCpp, you can follow the ComputeCpp Getting Started guide that outlines the installation process. All you need to do is include the VisionCpp.hpp header in your project and you are good to go! ( assuming that OpenCL and ComputeCPP is installed correctly. )

#include <visioncpp.hpp> //all that is needed

VisionCpp Tutorials

There are some tutorials explaining how to perform different operations using VisionCpp. These cover basic Hello World, Anisotropic Diffusion, Bayer Filter Demosaic, Dense Depth Reconstruction with Block Matching Algorithm and Harris Corner Detection.

Sample Code

Below is a very simple application that will do the conversion RGB -> HSV. Full source code can be found in the examples folder. RGB is assumed to be a three-channel unsigned char storage with a reasonable channel order.

  // main, args, checks and all the boring stuff

  // ...

  // where VisionCpp will run.
  auto dev = visioncpp::make_device<visioncpp::backend::sycl,
                                    visioncpp::device::cpu>();

  // create a host container for input data
  std::shared_ptr<unsigned char> in_rgb(new unsigned char[3],
  [](unsigned char *dataMem) { delete[] dataMem;});

  in_rgb.get()[0] = atoi(argv[1]);
  in_rgb.get()[1] = atoi(argv[2]);
  in_rgb.get()[2] = atoi(argv[3]);

  // create a host container for output data
  std::shared_ptr<unsigned char> out_hsv(new unsigned char[3],
  [](unsigned char *dataMem) { delete[] dataMem;});

  // exiting this scope will sync data
  {
    // definition of the VisionCpp pipeline:

    // create terminal nodes - a leaf node ( data node ) of the expression tree.
    // terminal struct takes 4 arguments
    // 1st template parameter specifies the data U8 (unsigned char) C3 (three
    // channels)
    // 2nd number of columns in the storage
    // 3rd number of rows in the storage
    // 4th underlying storage type - currently only Buffer2D supported
    auto data =
        visioncpp::terminal<visioncpp::pixel::U8C3, 1, 1,
                            visioncpp::memory_type::Buffer2D>(in_rgb.get());
    auto data_out =
        visioncpp::terminal<visioncpp::pixel::U8C3, 1, 1,
                            visioncpp::memory_type::Buffer2D>(out_hsv.get());

    // unsigned char -> float RGB storage conversion
    auto node = visioncpp::point_operation<visioncpp::OP_U8C3ToF32C3>(data);
    // float RGB to float HSV conversion
    auto node2 = visioncpp::point_operation<visioncpp::OP_RGBToHSV>(node);
    // helper node that allows display of HSV
    // for unsigned char: V <- 255*V, S <- 255*S, H <- H/2 ( to fit in range of 0..255 )
    auto node3 = visioncpp::point_operation<visioncpp::OP_HSVToU8C3>(node2);

    // assign operation that writes output of the pipe to output terminal node
    auto pipe = visioncpp::assign(data_out, node3);
    // execute the pipeline
    // 1st template parameter defines if VisionCpp back-end fuses the expression
    // 2nd & 3rd shared memory sizes ( column, row )
    // 4th & 5th local work group size ( column , row )
    visioncpp::execute<visioncpp::policy::Fuse, 1, 1, 1, 1>(pipe, dev);
  }

  printf("RGB: %u %u %u \nHSV: %u %u %u \n", in_rgb.get()[0], in_rgb.get()[1],
         in_rgb.get()[2], out_hsv.get()[0], out_hsv.get()[1], out_hsv.get()[2]);

Requirements

To successfully compile VisionCpp tests, you will need:

Build

Assuming you are in the root of a git repo:

mkdir build
cd  build
cmake .. -DComputeCpp_DIR={PATH_TO_COMPUTECPP_ROOT} -DCMAKE_CXX_COMPILER={FAVORITE_CXX_COMPILER}
make -j8
make test

The output binaries will be catalogued in bin folder.

| - build
  | - bin
    | - example
    | - test

Examples

There is a set of example code in the /example/ folder of the repository. Most of the examples are performing image operations from the camera input.

Documentation

Online documentation can be found here.

The documentation is created using Doxygen.

make doc

The documentation will be created in html folder in build directory.

| - build
  | - doc

Contributing

Contributors always welcome! See CONTRIBUTING.md for details.

The list of contributors.

Resources

License

The Apache License, Version 2.0 License. See LICENSE for more.

Known Issues

  • The Tuple class works only with clang++.

visioncpp's People

Contributors

bensuo avatar chriscummins avatar dependabot[bot] avatar duncanmcbain avatar georgeweb avatar graham-codeplay avatar marcelsheeny avatar mehdi-goli avatar ori-sky avatar rodburns avatar sitic avatar

Stargazers

 avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar

Watchers

 avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar

visioncpp's Issues

Linker has undefined references to OpenCV functions

Has anyone else had this error? This is using ubuntu's packaged libopencv (version 2.4.9.1+dfsg-1.5ubuntu1) on Ubuntu 16.04:

$ sudo apt-get install -y libopencv-dev
$ cmake .. -DCOMPUTECPP_PACKAGE_ROOT_DIR=$HOME/ComputeCpp
-- The C compiler identification is GNU 5.4.0
-- The CXX compiler identification is GNU 5.4.0
-- Check for working C compiler: /usr/bin/cc
-- Check for working C compiler: /usr/bin/cc -- works
-- Detecting C compiler ABI info
-- Detecting C compiler ABI info - done
-- Detecting C compile features
-- Detecting C compile features - done
-- Check for working CXX compiler: /usr/bin/c++
-- Check for working CXX compiler: /usr/bin/c++ -- works
-- Detecting CXX compiler ABI info
-- Detecting CXX compiler ABI info - done
-- Detecting CXX compile features
-- Detecting CXX compile features - done
-- Found PythonInterp: /usr/bin/python3 (found suitable version "3.5.2", minimum required is "3.2")
-- PYTHON_EXECUTABLE = /usr/bin/python3
-- Try C++11 flag = [-std=c++11]
-- Performing Test CXX11_FLAG_DETECTED
-- Performing Test CXX11_FLAG_DETECTED - Success
-- Found CXX11: -std=c++11
-- Looking for CL_VERSION_2_0
-- Looking for CL_VERSION_2_0 - not found
-- Looking for CL_VERSION_1_2
-- Looking for CL_VERSION_1_2 - found
-- Found OpenCL: /usr/lib/x86_64-linux-gnu/libOpenCL.so (found version "1.2")
-- Looking for pthread.h
-- Looking for pthread.h - found
-- Looking for pthread_create
-- Looking for pthread_create - not found
-- Looking for pthread_create in pthreads
-- Looking for pthread_create in pthreads - not found
-- Looking for pthread_create in pthread
-- Looking for pthread_create in pthread - found
-- Found Threads: TRUE
-- host compiler - gcc 5.4.0 (note pre 5.1 gcc ABI enabled)
-- ComputeCpp package - Found (/home/cec/ComputeCpp)
-- compute++ - Found (/home/cec/ComputeCpp)
-- computecpp_info - Found (/home/cec/ComputeCpp)
-- libComputeCpp.so - Found
-- ComputeCpp includes - Found (/home/cec/ComputeCpp)
-- Package version - CE 0.1.1
-- compute++ flags - -O2 -mllvm -inline-threshold=1000 -sycl -intelspirmetadata -emit-llvm
-- platform - your system can support ComputeCpp
-- /usr/bin/python3 cc-gen.py generated tests.
-- Found GTest: /usr/local/lib/libgtest.a
-- Could NOT find Doxygen (missing:  DOXYGEN_EXECUTABLE)
-- Configuring done
-- Generating done
-- Build files have been written to: /home/cec/src/visioncpp/build
$ make
Scanning dependencies of target example_greyscale_integration_header
[  1%] Building ComputeCpp integration header file /home/cec/src/visioncpp/build/greyscale.cpp.sycl
[  1%] Built target example_greyscale_integration_header
Scanning dependencies of target example_greyscale
[  2%] Building CXX object CMakeFiles/example_greyscale.dir/examples/greyscale.cpp.o
In file included from /home/cec/src/visioncpp/include/framework/evaluator/evaluator.hpp:295:0,
                 from /home/cec/src/visioncpp/include/framework/framework.hpp:42,
                 from /home/cec/src/visioncpp/include/visioncpp.hpp:38,
                 from /home/cec/src/visioncpp/examples/greyscale.cpp:31:
/home/cec/src/visioncpp/include/framework/evaluator/eval_assign/eval_assign.hpp: In instantiation of ‘static void visioncpp::internal::Evaluator<0ul, Output_Index, Offset, LC, LR, visioncpp::internal::Assign<LHS, RHS, Cols, Rows, LfType, LVL>, Loc, Params ...>::eval(Loc&, const visioncpp::internal::tools::tuple::Tuple<Params ...>&) [with long unsigned int Output_Index = 4ul; long unsigned int Offset = 2ul; long unsigned int LC = 8ul; long unsigned int LR = 8ul; LHS = visioncpp::internal::LeafNode<visioncpp::internal::PlaceHolder<2ul, 0ul, 640ul, 480ul, 0ul>, 0ul>; RHS = visioncpp::internal::RUnOP<visioncpp::internal::PixelUnaryOp<visioncpp::OP_GREYToCVBGR, float>, visioncpp::internal::RUnOP<visioncpp::internal::PixelUnaryOp<visioncpp::OP_RGBToGREY, visioncpp::pixel::Storage<float, 3ul> >, visioncpp::internal::RUnOP<visioncpp::internal::PixelUnaryOp<visioncpp::OP_CVBGRToRGB, visioncpp::pixel::Storage<unsigned char, 3ul> >, visioncpp::internal::LeafNode<visioncpp::internal::PlaceHolder<2ul, 1ul, 640ul, 480ul, 0ul>, 0ul>, 640ul, 480ul, 2ul, 1ul>, 640ul, 480ul, 2ul, 2ul>, 640ul, 480ul, 2ul, 3ul>; long unsigned int Cols = 640ul; long unsigned int Rows = 480ul; long unsigned int LfType = 2ul; long unsigned int LVL = 4ul; Loc = visioncpp::internal::Coordinate<8ul, 8ul, cl::sycl::nd_item<2> >; Params = {cl::sycl::accessor<visioncpp::pixel::Storage<unsigned char, 1ul>, 2, (cl::sycl::access::mode)3u, (cl::sycl::access::target)1u>, cl::sycl::accessor<visioncpp::pixel::Storage<unsigned char, 3ul>, 2, (cl::sycl::access::mode)0u, (cl::sycl::access::target)1u>}]’:
/home/cec/src/visioncpp/include/framework/evaluator/evaluator.hpp:290:29:   required from ‘void visioncpp::internal::eval(Loc&, const visioncpp::internal::tools::tuple::Tuple<Params ...>&) [with long unsigned int Offset = 2ul; long unsigned int LC = 8ul; long unsigned int LR = 8ul; Expr = visioncpp::internal::Assign<visioncpp::internal::LeafNode<visioncpp::internal::PlaceHolder<2ul, 0ul, 640ul, 480ul, 0ul>, 0ul>, visioncpp::internal::RUnOP<visioncpp::internal::PixelUnaryOp<visioncpp::OP_GREYToCVBGR, float>, visioncpp::internal::RUnOP<visioncpp::internal::PixelUnaryOp<visioncpp::OP_RGBToGREY, visioncpp::pixel::Storage<float, 3ul> >, visioncpp::internal::RUnOP<visioncpp::internal::PixelUnaryOp<visioncpp::OP_CVBGRToRGB, visioncpp::pixel::Storage<unsigned char, 3ul> >, visioncpp::internal::LeafNode<visioncpp::internal::PlaceHolder<2ul, 1ul, 640ul, 480ul, 0ul>, 0ul>, 640ul, 480ul, 2ul, 1ul>, 640ul, 480ul, 2ul, 2ul>, 640ul, 480ul, 2ul, 3ul>, 640ul, 480ul, 2ul, 4ul>; Loc = visioncpp::internal::Coordinate<8ul, 8ul, cl::sycl::nd_item<2> >; Params = {cl::sycl::accessor<visioncpp::pixel::Storage<unsigned char, 1ul>, 2, (cl::sycl::access::mode)3u, (cl::sycl::access::target)1u>, cl::sycl::accessor<visioncpp::pixel::Storage<unsigned char, 3ul>, 2, (cl::sycl::access::mode)0u, (cl::sycl::access::target)1u>}]’
/home/cec/src/visioncpp/include/framework/device/sycl/sycl_device.hpp:91:61:   required from ‘visioncpp::internal::Device_<(visioncpp::backend)0, dv>::execute(Expr&) const::<lambda(cl::sycl::handler&)>::<lambda(cl::sycl::nd_item<typename Expr::Type:: Dim>)> [with long unsigned int LC = 8ul; long unsigned int LR = 8ul; long unsigned int CGT = 640ul; long unsigned int RGT = 480ul; long unsigned int CLT = 8ul; long unsigned int RLT = 8ul; Expr = visioncpp::internal::Assign<visioncpp::internal::LeafNode<visioncpp::internal::VisionMemory<true, 1ul, 2ul, unsigned char, 640ul, 480ul, visioncpp::pixel::Storage<unsigned char, 1ul>, 1ul, 0ul, 0ul>, 0ul>, visioncpp::internal::RUnOP<visioncpp::internal::PixelUnaryOp<visioncpp::OP_GREYToCVBGR, float>, visioncpp::internal::RUnOP<visioncpp::internal::PixelUnaryOp<visioncpp::OP_RGBToGREY, visioncpp::pixel::Storage<float, 3ul> >, visioncpp::internal::RUnOP<visioncpp::internal::PixelUnaryOp<visioncpp::OP_CVBGRToRGB, visioncpp::pixel::Storage<unsigned char, 3ul> >, visioncpp::internal::LeafNode<visioncpp::internal::VisionMemory<true, 1ul, 2ul, unsigned char, 640ul, 480ul, visioncpp::pixel::Storage<unsigned char, 3ul>, 3ul, 0ul, 0ul>, 0ul>, 640ul, 480ul, 2ul, 1ul>, 640ul, 480ul, 2ul, 2ul>, 640ul, 480ul, 2ul, 3ul>, 640ul, 480ul, 2ul, 4ul>; visioncpp::device dv = (visioncpp::device)0; typename Expr::Type = visioncpp::internal::VisionMemory<false, 1ul, 2ul, unsigned char, 640ul, 480ul, visioncpp::pixel::Storage<unsigned char, 1ul>, 1ul, 0ul, 0ul>]’
/home/cec/src/visioncpp/include/framework/device/sycl/sycl_device.hpp:92:62:   required from ‘struct visioncpp::internal::Device_<(visioncpp::backend)0, dv>::execute(Expr&) const::<lambda(cl::sycl::handler&)> [with long unsigned int LC = 8ul; long unsigned int LR = 8ul; long unsigned int CGT = 640ul; long unsigned int RGT = 480ul; long unsigned int CLT = 8ul; long unsigned int RLT = 8ul; Expr = visioncpp::internal::Assign<visioncpp::internal::LeafNode<visioncpp::internal::VisionMemory<true, 1ul, 2ul, unsigned char, 640ul, 480ul, visioncpp::pixel::Storage<unsigned char, 1ul>, 1ul, 0ul, 0ul>, 0ul>, visioncpp::internal::RUnOP<visioncpp::internal::PixelUnaryOp<visioncpp::OP_GREYToCVBGR, float>, visioncpp::internal::RUnOP<visioncpp::internal::PixelUnaryOp<visioncpp::OP_RGBToGREY, visioncpp::pixel::Storage<float, 3ul> >, visioncpp::internal::RUnOP<visioncpp::internal::PixelUnaryOp<visioncpp::OP_CVBGRToRGB, visioncpp::pixel::Storage<unsigned char, 3ul> >, visioncpp::internal::LeafNode<visioncpp::internal::VisionMemory<true, 1ul, 2ul, unsigned char, 640ul, 480ul, visioncpp::pixel::Storage<unsigned char, 3ul>, 3ul, 0ul, 0ul>, 0ul>, 640ul, 480ul, 2ul, 1ul>, 640ul, 480ul, 2ul, 2ul>, 640ul, 480ul, 2ul, 3ul>, 640ul, 480ul, 2ul, 4ul>; visioncpp::device dv = (visioncpp::device)0]::<lambda(class cl::sycl::nd_item<2>)>’
/home/cec/src/visioncpp/include/framework/device/sycl/sycl_device.hpp:80:7:   required from ‘visioncpp::internal::Device_<(visioncpp::backend)0, dv>::execute(Expr&) const::<lambda(cl::sycl::handler&)> [with long unsigned int LC = 8ul; long unsigned int LR = 8ul; long unsigned int CGT = 640ul; long unsigned int RGT = 480ul; long unsigned int CLT = 8ul; long unsigned int RLT = 8ul; Expr = visioncpp::internal::Assign<visioncpp::internal::LeafNode<visioncpp::internal::VisionMemory<true, 1ul, 2ul, unsigned char, 640ul, 480ul, visioncpp::pixel::Storage<unsigned char, 1ul>, 1ul, 0ul, 0ul>, 0ul>, visioncpp::internal::RUnOP<visioncpp::internal::PixelUnaryOp<visioncpp::OP_GREYToCVBGR, float>, visioncpp::internal::RUnOP<visioncpp::internal::PixelUnaryOp<visioncpp::OP_RGBToGREY, visioncpp::pixel::Storage<float, 3ul> >, visioncpp::internal::RUnOP<visioncpp::internal::PixelUnaryOp<visioncpp::OP_CVBGRToRGB, visioncpp::pixel::Storage<unsigned char, 3ul> >, visioncpp::internal::LeafNode<visioncpp::internal::VisionMemory<true, 1ul, 2ul, unsigned char, 640ul, 480ul, visioncpp::pixel::Storage<unsigned char, 3ul>, 3ul, 0ul, 0ul>, 0ul>, 640ul, 480ul, 2ul, 1ul>, 640ul, 480ul, 2ul, 2ul>, 640ul, 480ul, 2ul, 3ul>, 640ul, 480ul, 2ul, 4ul>; visioncpp::device dv = (visioncpp::device)0]’
/home/cec/src/visioncpp/include/framework/device/sycl/sycl_device.hpp:68:59:   [ skipping 2 instantiation contexts, use -ftemplate-backtrace-limit=0 to disable ]
/home/cec/src/visioncpp/include/framework/executor/policy/fuse.hpp:62:5:   required from ‘static void visioncpp::internal::FuseExpr<LC, LR, LCT, LRT, Expr, DeviceT>::fuse(Expr&, const DeviceT&) [with long unsigned int LCIn = 8ul; long unsigned int LRIn = 8ul; long unsigned int LCT = 8ul; long unsigned int LRT = 8ul; Expr = visioncpp::internal::Assign<visioncpp::internal::LeafNode<visioncpp::internal::VisionMemory<true, 1ul, 2ul, unsigned char, 640ul, 480ul, visioncpp::pixel::Storage<unsigned char, 1ul>, 1ul, 0ul, 0ul>, 0ul>, visioncpp::internal::RUnOP<visioncpp::internal::PixelUnaryOp<visioncpp::OP_GREYToCVBGR, float>, visioncpp::internal::RUnOP<visioncpp::internal::PixelUnaryOp<visioncpp::OP_RGBToGREY, visioncpp::pixel::Storage<float, 3ul> >, visioncpp::internal::RUnOP<visioncpp::internal::PixelUnaryOp<visioncpp::OP_CVBGRToRGB, visioncpp::pixel::Storage<unsigned char, 3ul> >, visioncpp::internal::LeafNode<visioncpp::internal::VisionMemory<true, 1ul, 2ul, unsigned char, 640ul, 480ul, visioncpp::pixel::Storage<unsigned char, 3ul>, 3ul, 0ul, 0ul>, 0ul>, 640ul, 480ul, 2ul, 1ul>, 640ul, 480ul, 2ul, 2ul>, 640ul, 480ul, 2ul, 3ul>, 640ul, 480ul, 2ul, 4ul>; DeviceT = visioncpp::internal::Device_<(visioncpp::backend)0, (visioncpp::device)0>]’
/home/cec/src/visioncpp/include/framework/executor/policy/fuse.hpp:90:50:   required from ‘void visioncpp::internal::fuse(Expr, const DeviceT&) [with long unsigned int LC = 8ul; long unsigned int LR = 8ul; long unsigned int LCT = 8ul; long unsigned int LRT = 8ul; Expr = visioncpp::internal::Assign<visioncpp::internal::LeafNode<visioncpp::internal::VisionMemory<true, 1ul, 2ul, unsigned char, 640ul, 480ul, visioncpp::pixel::Storage<unsigned char, 1ul>, 1ul, 0ul, 0ul>, 0ul>, visioncpp::internal::RUnOP<visioncpp::internal::PixelUnaryOp<visioncpp::OP_GREYToCVBGR, float>, visioncpp::internal::RUnOP<visioncpp::internal::PixelUnaryOp<visioncpp::OP_RGBToGREY, visioncpp::pixel::Storage<float, 3ul> >, visioncpp::internal::RUnOP<visioncpp::internal::PixelUnaryOp<visioncpp::OP_CVBGRToRGB, visioncpp::pixel::Storage<unsigned char, 3ul> >, visioncpp::internal::LeafNode<visioncpp::internal::VisionMemory<true, 1ul, 2ul, unsigned char, 640ul, 480ul, visioncpp::pixel::Storage<unsigned char, 3ul>, 3ul, 0ul, 0ul>, 0ul>, 640ul, 480ul, 2ul, 1ul>, 640ul, 480ul, 2ul, 2ul>, 640ul, 480ul, 2ul, 3ul>, 640ul, 480ul, 2ul, 4ul>; DeviceT = visioncpp::internal::Device_<(visioncpp::backend)0, (visioncpp::device)0>]’
/home/cec/src/visioncpp/include/framework/executor/executor.hpp:92:27:   required from ‘static void visioncpp::internal::Executor<true, LC, LR, LCT, LRT, Expr, DeviceT>::execute(Expr, const DeviceT&) [with long unsigned int LC = 8ul; long unsigned int LR = 8ul; long unsigned int LCT = 8ul; long unsigned int LRT = 8ul; Expr = visioncpp::internal::Assign<visioncpp::internal::LeafNode<visioncpp::internal::VisionMemory<true, 1ul, 2ul, unsigned char, 640ul, 480ul, visioncpp::pixel::Storage<unsigned char, 1ul>, 1ul, 0ul, 0ul>, 0ul>, visioncpp::internal::RUnOP<visioncpp::internal::PixelUnaryOp<visioncpp::OP_GREYToCVBGR, float>, visioncpp::internal::RUnOP<visioncpp::internal::PixelUnaryOp<visioncpp::OP_RGBToGREY, visioncpp::pixel::Storage<float, 3ul> >, visioncpp::internal::RUnOP<visioncpp::internal::PixelUnaryOp<visioncpp::OP_CVBGRToRGB, visioncpp::pixel::Storage<unsigned char, 3ul> >, visioncpp::internal::LeafNode<visioncpp::internal::VisionMemory<true, 1ul, 2ul, unsigned char, 640ul, 480ul, visioncpp::pixel::Storage<unsigned char, 3ul>, 3ul, 0ul, 0ul>, 0ul>, 640ul, 480ul, 2ul, 1ul>, 640ul, 480ul, 2ul, 2ul>, 640ul, 480ul, 2ul, 3ul>, 640ul, 480ul, 2ul, 4ul>; DeviceT = visioncpp::internal::Device_<(visioncpp::backend)0, (visioncpp::device)0>]’
/home/cec/src/visioncpp/include/framework/executor/executor.hpp:134:67:   required from ‘static void visioncpp::internal::SubExprExecute<false, ExecPolicy, LC, LR, LCT, LRT, Expr, DeviceT>::execute(Expr&, const DeviceT&) [with bool ExecPolicy = true; long unsigned int LC = 8ul; long unsigned int LR = 8ul; long unsigned int LCT = 8ul; long unsigned int LRT = 8ul; Expr = visioncpp::internal::Assign<visioncpp::internal::LeafNode<visioncpp::internal::VisionMemory<true, 1ul, 2ul, unsigned char, 640ul, 480ul, visioncpp::pixel::Storage<unsigned char, 1ul>, 1ul, 0ul, 0ul>, 0ul>, visioncpp::internal::RUnOP<visioncpp::internal::PixelUnaryOp<visioncpp::OP_GREYToCVBGR, float>, visioncpp::internal::RUnOP<visioncpp::internal::PixelUnaryOp<visioncpp::OP_RGBToGREY, visioncpp::pixel::Storage<float, 3ul> >, visioncpp::internal::RUnOP<visioncpp::internal::PixelUnaryOp<visioncpp::OP_CVBGRToRGB, visioncpp::pixel::Storage<unsigned char, 3ul> >, visioncpp::internal::LeafNode<visioncpp::internal::VisionMemory<true, 1ul, 2ul, unsigned char, 640ul, 480ul, visioncpp::pixel::Storage<unsigned char, 3ul>, 3ul, 0ul, 0ul>, 0ul>, 640ul, 480ul, 2ul, 1ul>, 640ul, 480ul, 2ul, 2ul>, 640ul, 480ul, 2ul, 3ul>, 640ul, 480ul, 2ul, 4ul>; DeviceT = visioncpp::internal::Device_<(visioncpp::backend)0, (visioncpp::device)0>]’
/home/cec/src/visioncpp/include/framework/executor/executor.hpp:157:65:   required from ‘void visioncpp::execute(Expr&, const DeviceT&) [with bool ExecPolicy = true; long unsigned int LC = 8ul; long unsigned int LR = 8ul; long unsigned int LCT = 8ul; long unsigned int LRT = 8ul; Expr = visioncpp::internal::Assign<visioncpp::internal::LeafNode<visioncpp::internal::VisionMemory<true, 1ul, 2ul, unsigned char, 640ul, 480ul, visioncpp::pixel::Storage<unsigned char, 1ul>, 1ul, 0ul, 0ul>, 0ul>, visioncpp::internal::RUnOP<visioncpp::internal::PixelUnaryOp<visioncpp::OP_GREYToCVBGR, float>, visioncpp::internal::RUnOP<visioncpp::internal::PixelUnaryOp<visioncpp::OP_RGBToGREY, visioncpp::pixel::Storage<float, 3ul> >, visioncpp::internal::RUnOP<visioncpp::internal::PixelUnaryOp<visioncpp::OP_CVBGRToRGB, visioncpp::pixel::Storage<unsigned char, 3ul> >, visioncpp::internal::LeafNode<visioncpp::internal::VisionMemory<true, 1ul, 2ul, unsigned char, 640ul, 480ul, visioncpp::pixel::Storage<unsigned char, 3ul>, 3ul, 0ul, 0ul>, 0ul>, 640ul, 480ul, 2ul, 1ul>, 640ul, 480ul, 2ul, 2ul>, 640ul, 480ul, 2ul, 3ul>, 640ul, 480ul, 2ul, 4ul>; DeviceT = visioncpp::internal::Device_<(visioncpp::backend)0, (visioncpp::device)0>]’
/home/cec/src/visioncpp/examples/greyscale.cpp:102:70:   required from here
/home/cec/src/visioncpp/include/framework/evaluator/eval_assign/eval_assign.hpp:77:23: warning: comparison between signed and unsigned integer expressions [-Wsign-compare]
     for (int i = 0; i < LC; i += cOffset.cLRng)
                       ^
/home/cec/src/visioncpp/include/framework/evaluator/eval_assign/eval_assign.hpp:79:27: warning: comparison between signed and unsigned integer expressions [-Wsign-compare]
         for (int j = 0; j < LR; j += cOffset.rLRng)
                           ^
[  3%] Linking CXX executable bin/example/example_greyscale
CMakeFiles/example_greyscale.dir/examples/greyscale.cpp.o: In function `main':
greyscale.cpp:(.text.startup+0x95): undefined reference to `cv::VideoCapture::open(std::string const&)'
greyscale.cpp:(.text.startup+0x149a): undefined reference to `cv::imshow(std::string const&, cv::_InputArray const&)'
greyscale.cpp:(.text.startup+0x14f0): undefined reference to `cv::imshow(std::string const&, cv::_InputArray const&)'
collect2: error: ld returned 1 exit status
CMakeFiles/example_greyscale.dir/build.make:126: recipe for target 'bin/example/example_greyscale' failed
make[2]: *** [bin/example/example_greyscale] Error 1
CMakeFiles/Makefile2:259: recipe for target 'CMakeFiles/example_greyscale.dir/all' failed
make[1]: *** [CMakeFiles/example_greyscale.dir/all] Error 2
Makefile:94: recipe for target 'all' failed
make: *** [all] Error 2

Pushing to forks/feature branches rebuilds the documentation

It looks like from the Travis CI logs that pushing to my feature branches is rebuilding and pushing updated Doxygen:

The command "if [ "$TRAVIS_PULL_REQUEST" = "false" ]; then bash ./scripts/travis_build_docs.sh; fi" exited with 0.
$ if [ "$TRAVIS_PULL_REQUEST" = "false" ]; then bash ./scripts/travis_deploy_docs.sh; fi
Cloning into '.'...
remote: Counting objects: 4213, done.
remote: Total 4213 (delta 0), reused 0 (delta 0), pack-reused 4213
Receiving objects: 100% (4213/4213), 2.06 MiB | 0 bytes/s, done.
Resolving deltas: 100% (3259/3259), done.
Checking connectivity... done.
[gh-pages be880ba] Deploy code docs to GitHub Pages Travis build: 7
 825 files changed, 825 insertions(+), 825 deletions(-)

It probably needs a more strict rule than only ignoring pull requests. I'll take a look at this

Greyscale Sample-Not getting correct output

While running greyscale sample available in the visioncpp github repo, I am getting a noise image as output.
PFA the attached input and output image.

OS: Ubuntu 18.04.3
computcpp -1.2.0
opencv- 4.1.1
flower_input
flower_output1

Recommend Projects

  • React photo React

    A declarative, efficient, and flexible JavaScript library for building user interfaces.

  • Vue.js photo Vue.js

    🖖 Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.

  • Typescript photo Typescript

    TypeScript is a superset of JavaScript that compiles to clean JavaScript output.

  • TensorFlow photo TensorFlow

    An Open Source Machine Learning Framework for Everyone

  • Django photo Django

    The Web framework for perfectionists with deadlines.

  • D3 photo D3

    Bring data to life with SVG, Canvas and HTML. 📊📈🎉

Recommend Topics

  • javascript

    JavaScript (JS) is a lightweight interpreted programming language with first-class functions.

  • web

    Some thing interesting about web. New door for the world.

  • server

    A server is a program made to process requests and deliver data to clients.

  • Machine learning

    Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.

  • Game

    Some thing interesting about game, make everyone happy.

Recommend Org

  • Facebook photo Facebook

    We are working to build community through open source technology. NB: members must have two-factor auth.

  • Microsoft photo Microsoft

    Open source projects and samples from Microsoft.

  • Google photo Google

    Google ❤️ Open Source for everyone.

  • D3 photo D3

    Data-Driven Documents codes.