I have just found IPL21 library of Intel image processing library on web.
But I can't find how to use and compile this library in vc++2010.
There isn't an example about this as I know.
So would you please let me know the example of what how to load and compile the library in vc++2010 and how to read file and use in processing.
IPL library is too outdated to be helpful. It misses code optimizations for all modern CPU architectures. Instead, you better try community license IPP.Besides optimization it has many additional functions for image processing.
Related
Do we have a compiler for RISC-V vector instructions now? I have searched online and it seems we still don't have one.
It seems like on various RISC-V cores there are some jobs done already. Like PULP from ETH Zurich, Università di Bologna, they design SIMD-like extensions and also have corresponding GCC with modifications.
There is some preliminary work done on LLVM: https://github.com/rkruppe/rvv-llvm and there are multiple custom extensions that do similar things but are not following the (not yet frozen) standard. Most notably the RI5CY core from the PULP project has been used not only in academia but also commercial ASICs like on the gapuino (GAP8) and VEGABoard (RV32M1) that can be used with a GCC port.
Also, see some pointers regarding upstream and SiFive GCC support for the V extension here.
I am working with OpenCV, an open source image processing library, and due to complexities in my algorithm I need to use multiple threads for video processing.
How multi-threading is done on C++ 98? I know about C++ 11 has a built in support library for threading (std::thread) but my platform (MSVC++ 2010) does not have that. Also I read about Boost library, which is a general purpose extension to C++ STL, has methods for multi-threading. I also know with MSDN support (windows.h) I can create and manage threads for Windows applications. Finally, I found out that Qt library, a cross platform GUI solution, has support for threading.
Is there a naive way (not having any 3rd party libraries) to create a cross-platform multi-threading application?
C++98 does not have any support for threading, neither in the language nor the standard library. You need to use a third party library and you have already listed a number of the main candidates.
OpenCV relies on different external systems for multithreading (or more accurately parallel processing).
Possible options are:
OpenMP (handled at the compiler level);
Intel's TBB (external library);
libdispatch (on systems that support it, like MacOS, iOS, *BSD);
GPGPU approaches with CUDA and OpenCL.
In recent versions of OpenCV these systems are "hidden" behind a parallel_for construct.
All this applies to parallel processing, i.e., data parallel tasks (roughly speaking, process each pixel or row of the input in parallel). If you need application level multithreading (like for example having a master thread and workers) then you need to use frameworks such as POSIX's threads or Qt.
I recommend boost::thread which is (mostly) compatible with std::thread in C++11. It is cross-platform and very mature.
OpenCV's parallelism is internal and does not directly mix with your code, but it may use more resources and cores than you might expect (as a feature), but this might be at the expense of other external processes.
I am developing an object-recognition system. I found that the critical part of my algo is the
extractor.compute();
(After having detector.detect() keypoints)
Is there any way to let compute the feature vector with more core? I can use up to 8 core.
Opencv already implements multithread framework for this. Check that you compiled opencv with threading option 'ON'. You should go for an opencv documentation reading, gpu::SURF_GPU may interest you.
You can run cmake again to see the compilation options you used.
I was reading an article about cross-compiling for OSX on linux, but it was quite hard to understand.
What tools do I need? And what configurations are necessary?
Are there any tools for creating packages too?
First you need odcctools, which contains assembler and linker and such (like binutils but capable of handling the Mach-O object format). Then you need the system libraries from the official SDK. You can download it from Apple, but must agree to some stuff and become a member to do so. And finally good old gcc. Quite easy in theory, but in reallity a horrible mess. The easiest way to go (that I know of) is to use I'm Cross!.
Update: I found a newer and better updated method called xchain. It requires more manual work than I'm Cross! thou.
how can I write just a simple disassembler for linux from scratches?
Are there any libs to use? I need something that "just works".
Instead of writing one, try Objdump.
Based on your comment, and your desire to implement from scratch, I take it this is a school project. You could get the source for objdump and see what libraries and techniques it uses.
The BFD library might be of use.
you have to understand the ELF file format first. Then, you can start processing the various sections of code according to the opcodes of your architecture.
You can use libbfd and libopcodes, which are libraries distributed as part of binutils.
http://www.gnu.org/software/binutils/
As an example of the power of these libraries, check out the Online Disassembler (ODA).
http://www.onlinedisassembler.com
ODA supports a myriad of architectures and provides a basic feature set. You can enter binary data in the Live View and watch the disassembly appear as you type, or you can upload a file to disassemble. A nice feature of this site is that you can share the link to the disassembly with others.
You can take a look at the code of ERESI
The ERESI Reverse Engineering Software Interface is a multi-architecture binary analysis framework with a tailored domain specific language for reverse engineering and program manipulation.