瀏覽代碼

Z991239-1085 #comment Linux下编译libimageproc通过

ITC\80296915 5 年之前
父節點
當前提交
de3687765e

+ 2 - 0
.gitignore

@@ -195,3 +195,5 @@ compile_commands.json
 CTestTestfile.cmake
 _deps
 #CMakeSettings.json
+/Other/libimageproc/RCa15420
+/cpp.hint

+ 47 - 0
Other/libimageproc/CMakeLists.txt

@@ -0,0 +1,47 @@
+set(MODULE_NAME "libimageproc")
+set(MODULE_PREFIX "LIB_IMAGEPROC_FUNC")
+
+set(${MODULE_PREFIX}_SRCS
+	dllmain.cpp
+	libimageproc.cpp
+	libimageproc.h
+	resource.h
+	stdafx.cpp
+	stdafx.h
+	targetver.h
+)
+
+add_library(${MODULE_NAME} SHARED ${${MODULE_PREFIX}_SRCS})
+
+
+conan_cmake_run(REQUIRES opencv/3.1.0@LR04.02_ThirdParty/testing
+BASIC_SETUP CMAKE_TARGETS
+BUILD missing)
+
+target_include_directories(${MODULE_NAME} PRIVATE
+	"${CONAN_RVCFRAMEWORK_ROOT}/include"
+	${RVC_COMMON_INCLUDE_DIR}
+    ${CONAN_INCLUDE_DIRS_OPENCV}
+    ${CONAN_INCLUDE_DIRS_OPENCV}/opencv
+    )
+
+target_compile_definitions(${MODULE_NAME} PUBLIC "LIBIMAGEPROC_EXPORTS")
+
+
+# 添加需要依赖的其他共享库(包括系统库)
+target_link_directories(${MODULE_NAME} PRIVATE ${CONAN_LIB_DIRS_OPENCV})
+target_link_libraries(${MODULE_NAME} ${CONAN_LIBS_OPENCV})
+
+if(MSVC)
+	install(TARGETS ${MODULE_NAME} 
+    RUNTIME DESTINATION "${RVC_RUNTIME_PATH}" COMPONENT libraries
+    ARCHIVE DESTINATION "${RVC_LIBRARY_PATH}" COMPONENT develops EXCLUDE_FROM_ALL
+    LIBRARY DESTINATION "${RVC_LIBRARY_PATH}" COMPONENT libraries
+    )
+else()
+install(TARGETS ${MODULE_NAME} 
+    RUNTIME DESTINATION "${RVC_RUNTIME_PATH}"
+    ARCHIVE DESTINATION "${RVC_LIBRARY_PATH}"
+    LIBRARY DESTINATION "${RVC_RUNTIME_PATH}"
+    COMPONENT libraries)
+endif(MSVC)

+ 92 - 67
Other/libimageproc/libimageproc.cpp

@@ -6,88 +6,113 @@
 #include "highgui.h"
 #include "cv.h"
 #include "resource.h"
-#include "atlcore.h"
+//#include "atlcore.h"
 
-static HINSTANCE g_module = NULL;
+//static HINSTANCE g_module = NULL;
 
 // 这是导出函数的一个示例。
 
-LIBIMAGEPROC_API bool imageprocess(char*BackImgPath,char*FrontImgPath,char*ResultImgPath)
-{	
-	IplImage *pBK = cvCreateImage(cvSize(324,202),IPL_DEPTH_8U,3);
+//LIBIMAGEPROC_API bool imageprocess(char*BackImgPath,char*FrontImgPath,char*ResultImgPath)
+//{	
+//	IplImage *pBK = cvCreateImage(cvSize(324,202),IPL_DEPTH_8U,3);
+//
+//	//IplImage* hBitmap = cvLoadImage("bk.bmp", -1);
+//
+//	HBITMAP hBitmap = (HBITMAP)LoadImageA(g_module, 
+//		MAKEINTRESOURCEA(IDB_BK), 
+//		IMAGE_BITMAP, 
+//		0, 
+//		0, 
+//		LR_CREATEDIBSECTION|LR_DEFAULTSIZE);
+//	if (hBitmap)
+//	{
+//		long cb = 324 * 202 * 3;
+//		GetBitmapBits(hBitmap, cb, pBK->imageData);
+//		DeleteObject(hBitmap);
+//	}
+//	IplImage *pfront	= cvLoadImage(FrontImgPath,1);
+//	if (pBK == NULL || pfront == NULL)
+//		return false;
+//	IplImage *pImg		= cvCreateImage(cvSize(pfront->width,pfront->height),IPL_DEPTH_8U,1);
+//	int j,i;
+//	CvMat bk;
+//	cvGetSubRect(pBK,&bk,cvRect(200,30,pfront->width,pfront->height));
+//	
+//	cvCvtColor(pfront,pImg,CV_RGB2GRAY); //rgb转换为灰度图
+//	for(j = 0;j< pImg->height ; j++)
+//	{
+//		uchar* ptr = (uchar*)(pImg->imageData+j*pImg->widthStep);
+//		uchar* ptr1 = (uchar*)(pfront->imageData+j*pfront->widthStep);
+//		uchar* ptr2 = (uchar*)(bk.data.ptr+j*bk.step);
+//		for(i = 0;i < pImg->width ; i++)
+//		{
+//			if(ptr[i] < 220)  //像素值小于220的保留下来 并显示到背景图上 即白色部分被去除 
+//			{
+//				ptr2[i*3] = ptr1[i*3];
+//				ptr2[i*3 + 1] = ptr1[i*3 + 1];
+//				ptr2[i*3 + 2] = ptr1[i*3 + 2];
+//			}
+//		}
+//	}
+//
+//	cvSaveImage(ResultImgPath,pBK);
+//	cvReleaseImage( &pBK);
+//	cvReleaseImage( &pfront);
+//	cvReleaseImage( &pImg);
+//	return true;
+//}
 
-	HBITMAP hBitmap = (HBITMAP)LoadImageA(g_module, 
-		MAKEINTRESOURCEA(IDB_BK), 
-		IMAGE_BITMAP, 
-		0, 
-		0, 
-		LR_CREATEDIBSECTION|LR_DEFAULTSIZE);
-	if (hBitmap)
-	{
-		LONG cb = 324 * 202 * 3;
-		GetBitmapBits(hBitmap, cb, pBK->imageData);
-		DeleteObject(hBitmap);
-	}
-	IplImage *pfront	= cvLoadImage(FrontImgPath,1);
+bool imageprocess(char* BackImgPath, char* FrontImgPath, char* ResultImgPath)
+{
+	//IplImage* pBK = cvCreateImage(cvSize(324, 202), IPL_DEPTH_8U, 3);
+
+	IplImage* pBK = cvLoadImage("bk.bmp", 1);
+
+	IplImage* pfront = cvLoadImage(FrontImgPath, 1);
 	if (pBK == NULL || pfront == NULL)
 		return false;
-	IplImage *pImg		= cvCreateImage(cvSize(pfront->width,pfront->height),IPL_DEPTH_8U,1);
-	int j,i;
+	IplImage* pImg = cvCreateImage(cvSize(pfront->width, pfront->height), IPL_DEPTH_8U, 1);
+	int j, i;
 	CvMat bk;
-	cvGetSubRect(pBK,&bk,cvRect(200,30,pfront->width,pfront->height));
-	
-	cvCvtColor(pfront,pImg,CV_RGB2GRAY); //rgb转换为灰度图
-	for(j = 0;j< pImg->height ; j++)
+	cvGetSubRect(pBK, &bk, cvRect(200, 30, pfront->width, pfront->height));
+
+	cvCvtColor(pfront, pImg, CV_RGB2GRAY); //rgb转换为灰度图
+	for (j = 0; j < pImg->height; j++)
 	{
-		uchar* ptr = (uchar*)(pImg->imageData+j*pImg->widthStep);
-		uchar* ptr1 = (uchar*)(pfront->imageData+j*pfront->widthStep);
-		uchar* ptr2 = (uchar*)(bk.data.ptr+j*bk.step);
-		for(i = 0;i < pImg->width ; i++)
+		uchar* ptr = (uchar*)(pImg->imageData + j * pImg->widthStep);
+		uchar* ptr1 = (uchar*)(pfront->imageData + j * pfront->widthStep);
+		uchar* ptr2 = (uchar*)(bk.data.ptr + j * bk.step);
+		for (i = 0; i < pImg->width; i++)
 		{
-			if(ptr[i] < 220)  //像素值小于220的保留下来 并显示到背景图上 即白色部分被去除 
+			if (ptr[i] < 220)  //像素值小于220的保留下来 并显示到背景图上 即白色部分被去除 
 			{
-				ptr2[i*3] = ptr1[i*3];
-				ptr2[i*3 + 1] = ptr1[i*3 + 1];
-				ptr2[i*3 + 2] = ptr1[i*3 + 2];
+				ptr2[i * 3] = ptr1[i * 3];
+				ptr2[i * 3 + 1] = ptr1[i * 3 + 1];
+				ptr2[i * 3 + 2] = ptr1[i * 3 + 2];
 			}
 		}
 	}
 
-	cvSaveImage(ResultImgPath,pBK);
-	cvReleaseImage( &pBK);
-	cvReleaseImage( &pfront);
-	cvReleaseImage( &pImg);
-	return true;
-}
-
-LIBIMAGEPROC_API bool imageprocess2(char* BackImgPath, char* FrontImgPath, char* ResultImgPath)
-{
-	cv::Mat pBK(324, 202, IPL_DEPTH_8U, 3);
-
-	HBITMAP hBitmap = (HBITMAP)LoadImageA(g_module,
-		MAKEINTRESOURCEA(IDB_BK),
-		IMAGE_BITMAP,
-		0,
-		0,
-		LR_CREATEDIBSECTION | LR_DEFAULTSIZE);
-
+	cvSaveImage(ResultImgPath, pBK);
+	cvReleaseImage(&pBK);
+	cvReleaseImage(&pfront);
+	cvReleaseImage(&pImg);
 	return true;
 }
 
-
-BOOL APIENTRY DllMain( HINSTANCE hModule, DWORD  ul_reason_for_call, LPVOID lpReserved)
-{
-	switch (ul_reason_for_call)
-	{
-	case DLL_PROCESS_ATTACH:
-		g_module = hModule;
-		DisableThreadLibraryCalls(hModule);
-		break;
-	case DLL_THREAD_ATTACH:
-	case DLL_THREAD_DETACH:
-	case DLL_PROCESS_DETACH:
-		break;
-	}
-
-	return TRUE;
-}
+//BOOL APIENTRY DllMain( HINSTANCE hModule, DWORD  ul_reason_for_call, LPVOID lpReserved)
+//{
+//	switch (ul_reason_for_call)
+//	{
+//	case DLL_PROCESS_ATTACH:
+//		g_module = hModule;
+//		DisableThreadLibraryCalls(hModule);
+//		break;
+//	case DLL_THREAD_ATTACH:
+//	case DLL_THREAD_DETACH:
+//	case DLL_PROCESS_DETACH:
+//		break;
+//	}
+//
+//	return TRUE;
+//}

+ 3 - 1
Other/libimageproc/libimageproc.h

@@ -10,4 +10,6 @@
 #define LIBIMAGEPROC_API __declspec(dllimport)
 #endif
 
-LIBIMAGEPROC_API bool imageprocess(char*BackImgPath,char*FrontImgPath,char*ResultImgPath);
+//LIBIMAGEPROC_API bool imageprocess(char*BackImgPath,char*FrontImgPath,char*ResultImgPath);
+
+bool imageprocess(char* BackImgPath, char* FrontImgPath, char* ResultImgPath);

二進制
Other/libimageproc/resource.h


+ 1 - 1
Other/libimageproc/stdafx.h

@@ -9,7 +9,7 @@
 
 #define WIN32_LEAN_AND_MEAN             //  从 Windows 头文件中排除极少使用的信息
 // Windows 头文件:
-#include <windows.h>
+//#include <windows.h>
 
 
 

+ 1 - 1
Other/libimageproc/targetver.h

@@ -5,4 +5,4 @@
 // 如果要为以前的 Windows 平台生成应用程序,请包括 WinSDKVer.h,并将
 // WIN32_WINNT 宏设置为要支持的平台,然后再包括 SDKDDKVer.h。
 
-#include <SDKDDKVer.h>
+//#include <SDKDDKVer.h>