BingObjectnessCVPR14源码编译环境由vs2012+64位转换为vs2012+32位机过程

一、版本转换


1.将源码中vs2012版本转换为vs2010版本。


 


二、在vs编译环境中,openmp环境配置。


1.ConfigurationProlperties->c/c++->Language->Open MP Support->Yes


 


三、用_popcnt函数实现_popcnt64函数功能,需要自己动手在INT64类型基础上写函数。要加头文件#include<intrin.h>在stdafx.h中。


inline INT64 __popcount64(INT64x)


{


       return __popcnt((unsignedint)(x )) +__popcnt((unsignedint)(x>> 32));


}


四、在LibLinear工程中编译生成LibLinear.lib文件,具体如下:


1. objectness下的properties->general->linker->linklibrary dependency 后面改成yes


2.在linear.cpp中函数voidset_print_string_function(void(*print_func)(const char*))前加入extern “c”;


3.build Liblinear工程,然后在ConfigurationProperties->Linker->General->Additional Library Directories中添加LibLinear.lib所在的位置路径。


五、Debugging information *.exe cannot be found or does not match(C++不能调试解决方法)


用这个方法,摘自某英文论坛


To enable debugging: 
1) Goto Project->HelloWorld Properties 
2) On the left expand "Configuration Properties" 
3) Expand "C/C++" 
4) On the left, Select "General" 
5) On the right, change "Debug Information Format" to "ProgramDatabase For Edit And Continue (/ZI)" 
5) On the left, Select "Optimization" 
6) On the right, change "Optimization" to "Disabled (/Od)" 
7) On the left, expand "Linker" 
8) On the left, select "Debugging" 
9) On the right, change "Generate Debug Info" to "Yes" 
10) Click ok 
11) Set your breakpoints 
12) Rebuild your application


六、代码中Mat无法解析问题


1.具体原因暂时无法知道,可能是opencv中Mat_对INT64(unsignedlong long)类型的支持问题,可以用以下matchTemplate()函数替换FilterTIP.cpp文件中的matchTemplate原函数。


引用:(http://www.cvchina.info/2014/02/25/14cvprbing/comment-page-5/#comment-7391)中第16楼上的Liuyu.


void FilterTIG::matchTemplate(const Mat &mag1u, Mat &matchCost1f)
{
	const int H = mag1u.rows, W = mag1u.cols;
	const Size sz(W+1, H+1); // Expand original size to avoid dealing with boundary conditions
	Mat_<float> scores(sz);
	// @ 2013.3.22 by ly;
	const int sizeSZ = sz.width * sz.height;
	INT64 * Tig1 = (INT64 *)malloc(sizeSZ * sizeof(INT64));
	INT64 * Tig2 = (INT64 *)malloc(sizeSZ * sizeof(INT64));
	INT64 * Tig4 = (INT64 *)malloc(sizeSZ * sizeof(INT64));
	INT64 * Tig8 = (INT64 *)malloc(sizeSZ * sizeof(INT64));
	byte * Row1 = (byte *)malloc(sizeSZ * sizeof(byte));
	byte * Row2 = (byte *)malloc(sizeSZ * sizeof(byte));
	byte * Row4 = (byte *)malloc(sizeSZ * sizeof(byte));
	byte * Row8 = (byte *)malloc(sizeSZ * sizeof(byte));
	memset(Tig1, 0, sizeSZ * sizeof(INT64)); memset(Tig2, 0, sizeSZ * sizeof(INT64));
	memset(Tig4, 0, sizeSZ * sizeof(INT64)); memset(Tig8, 0, sizeSZ * sizeof(INT64));
	memset(Row1, 0, sizeSZ * sizeof(byte)); memset(Row2, 0, sizeSZ * sizeof(byte));
	memset(Row4, 0, sizeSZ * sizeof(byte)); memset(Row8, 0, sizeSZ * sizeof(byte));
	for (int y=1; y<= H; y++)
	{
		const byte * G = mag1u.ptr(y-1);
		INT64 * T1 = Tig1 + y*sz.width;
		INT64 * T2 = Tig2 + y*sz.width;
		INT64 * T4 = Tig4 + y*sz.width;
		INT64 * T8 = Tig8 + y*sz.width;
		INT64 * Tu1 = Tig1 + (y-1)*sz.width;
		INT64 * Tu2 = Tig2 + (y-1)*sz.width;
		INT64 * Tu4 = Tig4 + (y-1)*sz.width;
		INT64 * Tu8 = Tig8 + (y-1)*sz.width;
		byte * R1 = Row1 + y*sz.width;
		byte * R2 = Row2 + y*sz.width;
		byte * R4 = Row4 + y*sz.width;
		byte * R8 = Row8 + y*sz.width;
		float *s = scores.ptr<float>(y);
		for (int x=1; x<= W; x++)
		{
			byte g = G[x-1];
			R1[x] = (R1[x-1] << 1) | ((g >> 4) & 1);
			R2[x] = (R2[x-1] << 1) | ((g >> 5) & 1);
			R4[x] = (R4[x-1] << 1) | ((g >> 6) & 1);
			R8[x] = (R8[x-1] << 1) | ((g >> 7) & 1);
			T1[x] = (Tu1[x] << 8) | R1[x];
			T2[x] = (Tu2[x] << 8) | R2[x];
			T4[x] = (Tu4[x] << 8) | R4[x];
			T8[x] = (Tu8[x] << 8) | R8[x];
			s[x] = dot(T1[x], T2[x], T4[x], T8[x]);
		}
	}
	free(Tig1);	free(Tig2);	free(Tig4);	free(Tig8);
	free(Row1); free(Row2); free(Row4); free(Row8);

	scores(Rect(8, 8, W-7, H-7)).copyTo(matchCost1f);

}


评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值