Si además quieres enviarnos un Artículo para el Blog y redes sociales, pulsa el siguiente botón:
Me ha costado lo suyo, y lo he hecho de la iguiente forma:
Me he bajado la version windows que es la que uso, he abierto el proyecto y he compilado en modo x64 tanto en modos Debug y Release saliendo todo ok, entonces he copiado el directorio del proyecto "include" (el que incluye D:OpenCV31includeopencv2imgproc, etc...) en d:openVC31include
Despues todos los .lib tanto los del modo release como los de modo debug en D:OpenCV31lib
Despues todas las dlls tanto las de modo debug como release en D:OpenCV31bin
Entonces abro el proyecto para ver las propiedades y he hecho:
En todas las configuraciones (debug y release):
Proyecto > properties > C/C++ > general > Additional Include directories: D:OpenCV31include
Linker > General > Additional Library Directories: D:OpenCV31lib
Linker > Input > Additional dependencies:
Modo release:
opencv_core310.lib
opencv_highgui310.lib
opencv_imgproc310.lib
opencv_imgcodecs310.lib
Modo debug:
opencv_core310d.lib
opencv_highgui310d.lib
opencv_imgproc310d.lib
opencv_imgcodecs310d.lib
Luego a la "Environment variable" path he añadido D:OpenCV31.lib
OJO!! hay que incluir imgcodecs.hpp pues en caso contrario no puedes leer ficheros de imagenes pues la funcion imread ha sido movida a imgcodecs.hpp desde la version 2.4.
Ejemplo:
#include "opencv2/core/core.hpp"
#include "opencv2/highgui/highgui.hpp"
#include "opencv2/imgcodecs/imgcodecs.hpp"
#include "opencv2/imgproc/imgproc.hpp"
#include <iostream>
#include <string>
typedef unsigned char uchar;
using namespace cv;
using namespace std;
#define NCALLE 8
char calles[NCALLE][100]={
"amsterdam.jpg",
"madrid.jpg",
"madrid1.jpg",
"JesusM1.jpg",
"JesusM2.jpg",
"Mexico.jpg",
"Ferraz.jpg",
"Mayor.jpg"};
//Ver hoja excel: "Exposure saturation.xlsx". Ideal contrast=saturation=1.45 o mejor 1.50
//exposure y brightness=0.0 no afectan
void applyLevels(Mat imagen, double exposure, double brightness, double contrast, double saturation);
void applyLevels(Mat imagen1,Mat imagen2, double exposure, double brightness, double contrast, double saturation);
int main(int, char**)
{
printf("Inicion");
namedWindow("Ventana", 1);
/// Matrices to store images
Mat frame1,frame2,frame3,frame4;
char fichero1[200];
strcpy(fichero1,"data/");strcat(fichero1,"72.jpg");
string fichero(fichero1);
//frame1=cvLoadImageM(fichero, CV_LOAD_IMAGE_COLOR );
frame1 = imread(fichero, IMREAD_COLOR); //cvLoadImageM(fichero, CV_LOAD_IMAGE_COLOR);
if( !frame1.data ) { printf("Error loading src1 n"); getchar();getchar();return -1; }
long w2=800,h2=w2*frame1.rows/frame1.cols;//800 pixels de ancho
resize(frame1, frame2, Size(w2, h2), 0, 0, INTER_CUBIC);
frame3=frame2.clone();//para cojer el mismo tamaño
frame4=frame2.clone();
double exposure=0.0,brightness=0.0,contrast=1.0,saturation=1.0;
int i_expos,i_brigh,i_contr,i_satur;
i_expos=0;i_brigh=0;i_contr=50;i_satur=50;
createTrackbar("Exposure", "Ventana", &i_expos, 200);
createTrackbar("Brigness", "Ventana", &i_brigh, 200);
createTrackbar("Contrast", "Ventana", &i_contr, 100);
createTrackbar("Saturate", "Ventana", &i_satur, 200);
while(true)
{
exposure =0.02*i_expos;
brightness=0.02*i_brigh;
contrast =i_contr/50.0;
saturation=i_satur/50.0;
applyLevels(frame2,frame3,exposure,brightness,contrast,saturation);
//frame3=frame2.clone();
//applyLevels(frame3,exposure,brightness,contrast,saturation);
//show the brightness and contrast adjusted image
imshow("Ventana", frame3);
// Wait until user press some key for 50ms
int iKey = waitKey(50);
//if user press 'ESC' key
if (iKey == 27)
{
break;
}
}
printf("nFINn exposure=%lg tbrightness=%lg tcontrast=%lg tsaturation=%lg",exposure,brightness,contrast,saturation);
getchar();getchar();
return 0;
}
//Ver hoja excel: "Exposure saturation.xlsx"
//Se recomienda contraste=saturacion=1.45
void applyLevels(Mat imagen, double exposure, double brightness, double contrast, double saturation)
{
uchar *rgb=imagen.data;
long step=imagen.step;
long height=imagen.rows;
double exposureFactor = pow(2.0, exposure);
double brightnessFactor = brightness / 10.0;
double contrastFactor = contrast > 0.0 ? contrast : 0.0;
double saturationFactor = 1.0f - saturation;
double f01 = exposureFactor / 255.0 * contrastFactor;
double f02 = 0.5f * (1.0f - contrastFactor);
long nPixel = step * height;
for(long pixelIndex = 0; pixelIndex < nPixel; pixelIndex+=3)
{
double R = rgb[pixelIndex];
double G = rgb[pixelIndex+1];
double B = rgb[pixelIndex+2];
R = R * f01 + f02;
G = G * f01 + f02;
B = B * f01 + f02;
double f03 = ((R * 0.3) + (G * 0.59) + (B * 0.11)) * saturationFactor + brightnessFactor;
R = (R * saturation + f03) * 255.0;
G = (G * saturation + f03) * 255.0;
B = (B * saturation + f03) * 255.0;
R = R > 255.0 ? 255.0 : R < 0.0 ? 0.0 : R;
G = G > 255.0 ? 255.0 : G < 0.0 ? 0.0 : G;
B = B > 255.0 ? 255.0 : B < 0.0 ? 0.0 : B;
rgb[pixelIndex ]=(uchar) R;
rgb[pixelIndex+1]=(uchar) G;
rgb[pixelIndex+2]=(uchar) B;
}
}
void applyLevels(Mat imagen1,Mat imagen2, double exposure, double brightness, double contrast, double saturation)
{
uchar *rgb1=imagen1.data;
uchar *rgb2=imagen2.data;
long step=imagen1.step;
long height=imagen1.rows;
if ( (height!=imagen2.rows) || (step!=imagen2.step) )
{
printf("nError en applyLevels() imagen1 size != imagen2 size");getchar();getchar();return;
}
double exposureFactor = pow(2.0, exposure);
double brightnessFactor = brightness / 10.0;
double contrastFactor = contrast > 0.0 ? contrast : 0.0;
double saturationFactor = 1.0f - saturation;
double f01 = exposureFactor / 255.0 * contrastFactor;
double f02 = 0.5f * (1.0f - contrastFactor);
long nPixel = step * height;
for(long pixelIndex = 0; pixelIndex < nPixel; pixelIndex+=3)
{
double R = rgb1[pixelIndex];
double G = rgb1[pixelIndex+1];
double B = rgb1[pixelIndex+2];
R = R * f01 + f02;
G = G * f01 + f02;
B = B * f01 + f02;
double f03 = ((R * 0.3) + (G * 0.59) + (B * 0.11)) * saturationFactor + brightnessFactor;
R = (R * saturation + f03) * 255.0;
G = (G * saturation + f03) * 255.0;
B = (B * saturation + f03) * 255.0;
R = R > 255.0 ? 255.0 : R < 0.0 ? 0.0 : R;
G = G > 255.0 ? 255.0 : G < 0.0 ? 0.0 : G;
B = B > 255.0 ? 255.0 : B < 0.0 ? 0.0 : B;
rgb2[pixelIndex ]=(uchar) R;
rgb2[pixelIndex+1]=(uchar) G;
rgb2[pixelIndex+2]=(uchar) B;
}
}
Aprovecho para poner muy resumido como se instala opencv2.4.xx, pues me parece que es algo mas ligero:
1. Bajarse Opencv 2.4.13 de sourceforge y descomprimir
2. Creo c:OpenCV2.4 y pego desde el downloadsopencvbuildinclude al c:OpenCV2.4include todo el contenido (si no saldrán errores de que no se encuentra el highgui.hpp o el core_c.h)
3. Idem con directorio downloadsopencvbuildx64 al c:OpenCV2.4x64
4. Añadir a variable de entorno PATH C:opencv2.4x64vc12bin (rearrancar el VS)
5. En el visual studio 2013 Crear proyecto vacio. Abrir Proyecto (all configurations y x64) > properties > y añadir:
C/C++ > general > Additional Include directories: c:OpenCV2.4includeopencv2;c:OpenCV2.4includeopencv;c:OpenCV2.4include
Linker > General > Additional Library Directories: c:OpenCV2.4x64vc12lib (ó c:OpenCV2.4Win32vc12lib si el proyecto fuera Win32)
Linker > Input > Additional dependencies: opencv_core2413.lib opencv_highgui2413.lib ó opencv_core2413d.lib opencv_highgui2413d.lib
Añadir al c++ los headers:
#include <opencv.hpp>
#include <highgui.hpp>