编辑: 怪只怪这光太美 | 2019-07-17 |
Win32 Release . 选择 Link tab ->
General category ->
Object/library modules . 加入空格分隔的 cv.lib, highgui.lib, cvaux.lib (optionally) 增加从属性项目到 workspace 中: 选择菜单: Project ->
Insert project into workspace . 选择 opencv\cv\make\cv.dsp. 同样步骤对 opencv\cvaux\make\cvaux.dsp, opencv\otherlibs\highgui\highgui.dsp. 设置从属性: 选择菜单: Project ->
Dependencies... 对 cv 选择 cxcore , 对 cvaux 选择 cv , cxcore , 对 highgui 选择 cxcore , 对你的项目,选择所有的: cxcore , cv , cvaux , highgui . 从属性配置保证了在源代码被改变的情况下,自动重新编译 opencv 库. 就这么多.可以编译并且运行一切了. Linux 的相关问题: TODO 使用库的技术问题: 怎么访问图像元素 (坐标起点相对于图像原点 image origin 从0开始,或者是左上角 (img->
origin=IPL_ORIGIN_TL) 或者是左下角 (img->
origin=IPL_ORIGIN_BL) 假设有 8-bit 1-通道的图像 I (IplImage* img): I(x,y) ~ ((uchar*)(img->
imageData + img->
widthStep*y))[x] 假设有 8-bit 3-通道的图像 I (IplImage* img): I(x,y)blue ~ ((uchar*)(img->
imageData + img->
widthStep*y))[x*3] I(x,y)green ~ ((uchar*)(img->
imageData + img->
widthStep*y))[x*3+1] I(x,y)red ~ ((uchar*)(img->
imageData + img->
widthStep*y))[x*3+2] 如果增加点 (100,100) 的亮度
30 ,那么可以: CvPoint pt = {100,100};
((uchar*)(img->
imageData + img->
widthStep*pt.y))[pt.x*3] += 30;
((uchar*)(img->
imageData + img->
widthStep*pt.y))[pt.x*3+1] += 30;
((uchar*)(img->
imageData + img->
widthStep*pt.y))[pt.x*3+2] += 30;
或者更有效的 CvPoint pt = {100,100};
uchar* temp_ptr = &
((uchar*)(img->
imageData + img->
widthStep*pt.y))[x*3];
temp_ptr[0] += 30;
temp_ptr[1] += 30;
temp_ptr[2] += 30;
假设有 32-bit 浮点数, 1-通道 图像 I (IplImage* img): I(x,y) ~ ((float*)(img->
imageData + img->
widthStep*y))[x] 现在,通用方法:假设有 N-通道,类型为 T 的图像: I(x,y)c ~ ((T*)(img->
imageData + img->
widthStep*y))[x*N + c] 或者你可使用宏 CV_IMAGE_ELEM( image_header, elemtype, y, x_Nc ) I(x,y)c ~ CV_IMAGE_ELEM( img, T, y, x*N + c ) 也有针对各种图像(包括 4-通道)和矩阵的函数(cvGet2D, cvSet2D), 但是它们都很慢. 如何访问矩阵元素? 方法是类似的 (都是针对
0 起点的列和行) 设有 32-bit 浮点数的实数矩阵 M (CvMat* mat): M(i,j) ~ ((float*)(mat->
data.ptr + mat->
step*i))[j] 设有 64-bit 浮点数的复数矩阵 M (CvMat* mat): Re M(i,j) ~ ((double*)(mat->
data.ptr + mat->
step*i))[j*2] Im M(i,j) ~ ((double*)(mat->
data.ptr + mat->
step*i))[j*2+1] 设有单通道矩阵,有宏 CV_MAT_ELEM( matrix, elemtype, row, col ), 例如对 32-bit 浮点数的实数矩阵 M(i,j) ~ CV_MAT_ELEM( mat, float, i, j ), 假如初始化 3x3 单位阵: CV_MAT_ELEM( mat, float, 0,
0 ) = 1.f;
CV_MAT_ELEM( mat, float, 0,
1 ) = 0.f;
CV_MAT_ELEM( mat, float, 0,
2 ) = 0.f;
CV_MAT_ELEM( mat, float, 1,
0 ) = 0.f;
CV_MAT_ELEM( mat, float, 1,
1 ) = 1.f;
CV_MAT_ELEM( mat, float, 1,
2 ) = 0.f;
CV_MAT_ELEM( mat, float, 2,
0 ) = 0.f;
CV_MAT_ELEM( mat, float, 2,
1 ) = 0.f;
CV_MAT_ELEM( mat, float, 2,
2 ) = 1.f;
如何在 OpenCV 中处理我自己的数据 设你有 300x200 32-bit 浮点数 image/array, 也就是对一个有
60000 个元素的数组. int cols = 300, rows = 200;