Skip to content
体验新版
项目
组织
正在加载...
登录
切换导航
打开侧边栏
Greenplum
Opencv
提交
9c0a5523
O
Opencv
项目概览
Greenplum
/
Opencv
大约 1 年 前同步成功
通知
7
Star
0
Fork
0
代码
文件
提交
分支
Tags
贡献者
分支图
Diff
Issue
0
列表
看板
标记
里程碑
合并请求
0
DevOps
流水线
流水线任务
计划
Wiki
0
Wiki
分析
仓库
DevOps
项目成员
Pages
O
Opencv
项目概览
项目概览
详情
发布
仓库
仓库
文件
提交
分支
标签
贡献者
分支图
比较
Issue
0
Issue
0
列表
看板
标记
里程碑
合并请求
0
合并请求
0
Pages
DevOps
DevOps
流水线
流水线任务
计划
分析
分析
仓库分析
DevOps
Wiki
0
Wiki
成员
成员
收起侧边栏
关闭侧边栏
动态
分支图
创建新Issue
流水线任务
提交
Issue看板
体验新版 GitCode,发现更多精彩内容 >>
提交
9c0a5523
编写于
12月 08, 2015
作者:
V
Vadim Pisarevsky
浏览文件
操作
浏览文件
下载
差异文件
Merge pull request #5757 from alalek:merge-2.4
上级
6c4232dc
d86d8ed9
变更
15
隐藏空白更改
内联
并排
Showing
15 changed file
with
209 addition
and
115 deletion
+209
-115
3rdparty/tbb/CMakeLists.txt
3rdparty/tbb/CMakeLists.txt
+22
-16
CMakeLists.txt
CMakeLists.txt
+3
-0
apps/traincascade/cascadeclassifier.cpp
apps/traincascade/cascadeclassifier.cpp
+8
-5
apps/traincascade/cascadeclassifier.h
apps/traincascade/cascadeclassifier.h
+2
-2
cmake/OpenCVFindLibsVideo.cmake
cmake/OpenCVFindLibsVideo.cmake
+2
-2
cmake/OpenCVUtils.cmake
cmake/OpenCVUtils.cmake
+7
-9
modules/calib3d/test/test_homography.cpp
modules/calib3d/test/test_homography.cpp
+4
-0
modules/features2d/src/blobdetector.cpp
modules/features2d/src/blobdetector.cpp
+4
-0
modules/stitching/src/matchers.cpp
modules/stitching/src/matchers.cpp
+5
-1
modules/videoio/src/cap.cpp
modules/videoio/src/cap.cpp
+4
-2
modules/videoio/src/cap_gstreamer.cpp
modules/videoio/src/cap_gstreamer.cpp
+110
-60
modules/videoio/src/cap_images.cpp
modules/videoio/src/cap_images.cpp
+27
-7
modules/videoio/test/test_ffmpeg.cpp
modules/videoio/test/test_ffmpeg.cpp
+4
-0
samples/gpu/CMakeLists.txt
samples/gpu/CMakeLists.txt
+7
-0
samples/gpu/opengl.cpp
samples/gpu/opengl.cpp
+0
-11
未找到文件。
3rdparty/tbb/CMakeLists.txt
浏览文件 @
9c0a5523
...
...
@@ -5,21 +5,26 @@ if (WIN32 AND NOT ARM)
message
(
FATAL_ERROR
"BUILD_TBB option supports Windows on ARM only!
\n
Use regular official TBB build instead of the BUILD_TBB option!"
)
endif
()
if
(
WIN32 AND ARM
)
# 4.1 update 4 - The first release that supports Windows RT. Hangs on some Android devices
set
(
tbb_ver
"tbb41_20130613oss"
)
set
(
tbb_url
"http://threadingbuildingblocks.org/sites/default/files/software_releases/source/tbb41_20130613oss_src.tgz"
)
set
(
tbb_md5
"108c8c1e481b0aaea61878289eb28b6a"
)
set
(
tbb_version_file
"version_string.ver"
)
ocv_warnings_disable
(
CMAKE_CXX_FLAGS /wd4702
)
else
()
# 4.1 update 2 - works fine
set
(
tbb_ver
"tbb41_20130116oss"
)
set
(
tbb_url
"http://threadingbuildingblocks.org/sites/default/files/software_releases/source/tbb41_20130116oss_src.tgz"
)
set
(
tbb_md5
"3809790e1001a1b32d59c9fee590ee85"
)
set
(
tbb_version_file
"version_string.ver"
)
ocv_warnings_disable
(
CMAKE_CXX_FLAGS -Wshadow
)
endif
()
set
(
tbb_ver
"tbb43_20141204oss"
)
set
(
tbb_url
"http://www.threadingbuildingblocks.org/sites/default/files/software_releases/source/tbb43_20141204oss_src.tgz"
)
set
(
tbb_md5
"e903dd92d9433701f097fa7ca29a3c1f"
)
set
(
tbb_version_file
"version_string.ver"
)
ocv_warnings_disable
(
CMAKE_CXX_FLAGS /wd4702
)
ocv_warnings_disable
(
CMAKE_CXX_FLAGS -Wshadow
)
# 4.1 update 4 - The first release that supports Windows RT. Hangs on some Android devices
#set(tbb_ver "tbb41_20130613oss")
#set(tbb_url "http://threadingbuildingblocks.org/sites/default/files/software_releases/source/tbb41_20130613oss_src.tgz")
#set(tbb_md5 "108c8c1e481b0aaea61878289eb28b6a")
#set(tbb_version_file "version_string.ver")
#ocv_warnings_disable(CMAKE_CXX_FLAGS /wd4702)
# 4.1 update 2 - works fine
#set(tbb_ver "tbb41_20130116oss")
#set(tbb_url "http://threadingbuildingblocks.org/sites/default/files/software_releases/source/tbb41_20130116oss_src.tgz")
#set(tbb_md5 "3809790e1001a1b32d59c9fee590ee85")
#set(tbb_version_file "version_string.ver")
#ocv_warnings_disable(CMAKE_CXX_FLAGS -Wshadow)
# 4.1 update 3 dev - Hangs on some Android devices
#set(tbb_ver "tbb41_20130401oss")
...
...
@@ -97,7 +102,7 @@ if(NOT EXISTS "${tbb_tarball}")
message
(
STATUS
"Downloading
${
tbb_ver
}
_src.tgz"
)
file
(
DOWNLOAD
"
${
tbb_url
}
"
"
${
tbb_tarball
}
"
TIMEOUT 600 STATUS __statvar
)
if
(
NOT __statvar EQUAL 0
)
message
(
FATAL_ERROR
"Failed to download TBB sources:
${
tbb_url
}
"
)
message
(
FATAL_ERROR
"Failed to download TBB sources
(
${
__statvar
}
)
:
${
tbb_url
}
"
)
endif
()
file
(
MD5
"
${
tbb_tarball
}
"
tbb_local_md5
)
if
(
NOT tbb_local_md5 STREQUAL tbb_md5
)
...
...
@@ -153,6 +158,7 @@ if (WIN32)
set
(
CMAKE_LINKER_FLAGS
"
${
CMAKE_LINKER_FLAGS
}
/APPCONTAINER"
)
else
()
add_definitions
(
-D__TBB_DYNAMIC_LOAD_ENABLED=0
#required
-D__TBB_WEAK_SYMBOLS_PRESENT=0
#required for 4.3
-D__TBB_BUILD=1
#required
-D__TBB_SURVIVE_THREAD_SWITCH=0
#no cilk support
-DTBB_USE_DEBUG=0
#just to be sure
...
...
CMakeLists.txt
浏览文件 @
9c0a5523
...
...
@@ -603,6 +603,9 @@ if(HAVE_CUDA)
if
(
HAVE_CUFFT
)
set
(
OPENCV_LINKER_LIBS
${
OPENCV_LINKER_LIBS
}
${
CUDA_cufft_LIBRARY
}
)
endif
()
foreach
(
p
${
CUDA_LIBS_PATH
}
)
set
(
OPENCV_LINKER_LIBS
${
OPENCV_LINKER_LIBS
}
-L
${
p
}
)
endforeach
()
endif
()
# ----------------------------------------------------------------------------
# Solution folders:
...
...
apps/traincascade/cascadeclassifier.cpp
浏览文件 @
9c0a5523
...
...
@@ -206,7 +206,7 @@ bool CvCascadeClassifier::train( const string _cascadeDirName,
cout
<<
endl
<<
"===== TRAINING "
<<
i
<<
"-stage ====="
<<
endl
;
cout
<<
"<BEGIN"
<<
endl
;
if
(
!
updateTrainingSet
(
tempLeafFARate
)
)
if
(
!
updateTrainingSet
(
requiredLeafFARate
,
tempLeafFARate
)
)
{
cout
<<
"Train dataset for temp stage can not be filled. "
"Branch training terminated."
<<
endl
;
...
...
@@ -297,17 +297,17 @@ int CvCascadeClassifier::predict( int sampleIdx )
return
1
;
}
bool
CvCascadeClassifier
::
updateTrainingSet
(
double
&
acceptanceRatio
)
bool
CvCascadeClassifier
::
updateTrainingSet
(
double
minimumAcceptanceRatio
,
double
&
acceptanceRatio
)
{
int64
posConsumed
=
0
,
negConsumed
=
0
;
imgReader
.
restart
();
int
posCount
=
fillPassedSamples
(
0
,
numPos
,
true
,
posConsumed
);
int
posCount
=
fillPassedSamples
(
0
,
numPos
,
true
,
0
,
posConsumed
);
if
(
!
posCount
)
return
false
;
cout
<<
"POS count : consumed "
<<
posCount
<<
" : "
<<
(
int
)
posConsumed
<<
endl
;
int
proNumNeg
=
cvRound
(
(
((
double
)
numNeg
)
*
((
double
)
posCount
)
)
/
numPos
);
// apply only a fraction of negative samples. double is required since overflow is possible
int
negCount
=
fillPassedSamples
(
posCount
,
proNumNeg
,
false
,
negConsumed
);
int
negCount
=
fillPassedSamples
(
posCount
,
proNumNeg
,
false
,
minimumAcceptanceRatio
,
negConsumed
);
if
(
!
negCount
)
return
false
;
...
...
@@ -317,7 +317,7 @@ bool CvCascadeClassifier::updateTrainingSet( double& acceptanceRatio)
return
true
;
}
int
CvCascadeClassifier
::
fillPassedSamples
(
int
first
,
int
count
,
bool
isPositive
,
int64
&
consumed
)
int
CvCascadeClassifier
::
fillPassedSamples
(
int
first
,
int
count
,
bool
isPositive
,
double
minimumAcceptanceRatio
,
int64
&
consumed
)
{
int
getcount
=
0
;
Mat
img
(
cascadeParams
.
winSize
,
CV_8UC1
);
...
...
@@ -325,6 +325,9 @@ int CvCascadeClassifier::fillPassedSamples( int first, int count, bool isPositiv
{
for
(
;
;
)
{
if
(
consumed
!=
0
&&
((
double
)
getcount
+
1
)
/
(
double
)(
int64
)
consumed
<=
minimumAcceptanceRatio
)
return
getcount
;
bool
isGetImg
=
isPositive
?
imgReader
.
getPos
(
img
)
:
imgReader
.
getNeg
(
img
);
if
(
!
isGetImg
)
...
...
apps/traincascade/cascadeclassifier.h
浏览文件 @
9c0a5523
...
...
@@ -100,8 +100,8 @@ private:
int
predict
(
int
sampleIdx
);
void
save
(
const
std
::
string
cascadeDirName
,
bool
baseFormat
=
false
);
bool
load
(
const
std
::
string
cascadeDirName
);
bool
updateTrainingSet
(
double
&
acceptanceRatio
);
int
fillPassedSamples
(
int
first
,
int
count
,
bool
isPositive
,
int64
&
consumed
);
bool
updateTrainingSet
(
double
minimumAcceptanceRatio
,
double
&
acceptanceRatio
);
int
fillPassedSamples
(
int
first
,
int
count
,
bool
isPositive
,
double
requiredAcceptanceRatio
,
int64
&
consumed
);
void
writeParams
(
cv
::
FileStorage
&
fs
)
const
;
void
writeStages
(
cv
::
FileStorage
&
fs
,
const
cv
::
Mat
&
featureMap
)
const
;
...
...
cmake/OpenCVFindLibsVideo.cmake
浏览文件 @
9c0a5523
...
...
@@ -12,7 +12,7 @@ endif(WITH_VFW)
# --- GStreamer ---
ocv_clear_vars
(
HAVE_GSTREAMER
)
# try to find gstreamer 1.x first
# try to find gstreamer 1.x first
if 0.10 was not requested
if
(
WITH_GSTREAMER AND NOT WITH_GSTREAMER_0_10
)
CHECK_MODULE
(
gstreamer-base-1.0 HAVE_GSTREAMER_BASE
)
CHECK_MODULE
(
gstreamer-video-1.0 HAVE_GSTREAMER_VIDEO
)
...
...
@@ -29,7 +29,7 @@ if(WITH_GSTREAMER AND NOT WITH_GSTREAMER_0_10)
set
(
GSTREAMER_PBUTILS_VERSION
${
ALIASOF_gstreamer-pbutils-1.0_VERSION
}
)
endif
()
endif
(
WITH_GSTREAMER AND NOT WITH_GSTREAMER_0_10
)
endif
()
# if gstreamer 1.x was not found, or we specified we wanted 0.10, try to find it
if
(
WITH_GSTREAMER AND NOT HAVE_GSTREAMER OR WITH_GSTREAMER_0_10
)
...
...
cmake/OpenCVUtils.cmake
浏览文件 @
9c0a5523
...
...
@@ -503,17 +503,15 @@ endmacro()
# convert list of paths to libraries names without lib prefix
macro
(
ocv_convert_to_lib_name var
)
set
(
__
tmp
""
)
function
(
ocv_convert_to_lib_name var
)
set
(
tmp
""
)
foreach
(
path
${
ARGN
}
)
get_filename_component
(
__
tmp_name
"
${
path
}
"
NAME_WE
)
string
(
REGEX REPLACE
"^lib"
""
__tmp_name
${
__tmp_name
}
)
list
(
APPEND
__tmp
"
${
__
tmp_name
}
"
)
get_filename_component
(
tmp_name
"
${
path
}
"
NAME_WE
)
string
(
REGEX REPLACE
"^lib"
""
tmp_name
"
${
tmp_name
}
"
)
list
(
APPEND
tmp
"
${
tmp_name
}
"
)
endforeach
()
set
(
${
var
}
${
__tmp
}
)
unset
(
__tmp
)
unset
(
__tmp_name
)
endmacro
()
set
(
${
var
}
${
tmp
}
PARENT_SCOPE
)
endfunction
()
# add install command
...
...
modules/calib3d/test/test_homography.cpp
浏览文件 @
9c0a5523
...
...
@@ -12,6 +12,7 @@
//
// Copyright (C) 2000-2008, Intel Corporation, all rights reserved.
// Copyright (C) 2009, Willow Garage Inc., all rights reserved.
// Copyright (C) 2015, Itseez Inc., all rights reserved.
// Third party copyrights are property of their respective owners.
//
// Redistribution and use in source and binary forms, with or without modification,
...
...
@@ -564,6 +565,9 @@ void CV_HomographyTest::run(int)
default:
continue
;
}
}
delete
[]
src_data
;
src_data
=
NULL
;
}
}
...
...
modules/features2d/src/blobdetector.cpp
浏览文件 @
9c0a5523
...
...
@@ -311,6 +311,10 @@ void SimpleBlobDetectorImpl::detect(InputArray image, std::vector<cv::KeyPoint>&
else
grayscaleImage
=
image
.
getMat
();
if
(
grayscaleImage
.
type
()
!=
CV_8UC1
)
{
CV_Error
(
Error
::
StsUnsupportedFormat
,
"Blob detector only supports 8-bit images!"
);
}
std
::
vector
<
std
::
vector
<
Center
>
>
centers
;
for
(
double
thresh
=
params
.
minThreshold
;
thresh
<
params
.
maxThreshold
;
thresh
+=
params
.
thresholdStep
)
{
...
...
modules/stitching/src/matchers.cpp
浏览文件 @
9c0a5523
...
...
@@ -220,7 +220,11 @@ void GpuMatcher::match(const ImageFeatures &features1, const ImageFeatures &feat
descriptors1_
.
upload
(
features1
.
descriptors
);
descriptors2_
.
upload
(
features2
.
descriptors
);
Ptr
<
cuda
::
DescriptorMatcher
>
matcher
=
cuda
::
DescriptorMatcher
::
createBFMatcher
(
NORM_L2
);
//TODO: NORM_L1 allows to avoid matcher crashes for ORB features, but is not absolutely correct for them.
// The best choice for ORB features is NORM_HAMMING, but it is incorrect for SURF features.
// More accurate fix in this place should be done in the future -- the type of the norm
// should be either a parameter of this method, or a field of the class.
Ptr
<
cuda
::
DescriptorMatcher
>
matcher
=
cuda
::
DescriptorMatcher
::
createBFMatcher
(
NORM_L1
);
MatchesSet
matches
;
...
...
modules/videoio/src/cap.cpp
浏览文件 @
9c0a5523
...
...
@@ -166,10 +166,12 @@ CV_IMPL CvCapture * cvCreateCameraCapture (int index)
#ifdef HAVE_GSTREAMER
if
(
!
capture
)
capture
=
cvCreateCapture_GStreamer
(
CV_CAP_GSTREAMER_V4L2
,
0
);
capture
=
cvCreateCapture_GStreamer
(
CV_CAP_GSTREAMER_V4L2
,
reinterpret_cast
<
char
*>
(
index
));
if
(
!
capture
)
capture
=
cvCreateCapture_GStreamer
(
CV_CAP_GSTREAMER_V4L
,
0
);
capture
=
cvCreateCapture_GStreamer
(
CV_CAP_GSTREAMER_V4L
,
reinterpret_cast
<
char
*>
(
index
));
#endif
if
(
pref
)
break
;
// CV_CAP_VFW
...
...
modules/videoio/src/cap_gstreamer.cpp
浏览文件 @
9c0a5523
...
...
@@ -75,10 +75,13 @@
#if GST_VERSION_MAJOR == 0
#define COLOR_ELEM "ffmpegcolorspace"
#define COLOR_ELEM_NAME "ffmpegcsp"
#elif FULL_GST_VERSION < VERSION_NUM(1,5,0)
#define COLOR_ELEM "videoconvert"
#define COLOR_ELEM_NAME COLOR_ELEM
#else
#define COLOR_ELEM "autovideoconvert"
#define COLOR_ELEM_NAME COLOR_ELEM
#endif
void
toFraction
(
double
decimal
,
double
&
numerator
,
double
&
denominator
);
...
...
@@ -142,6 +145,7 @@ protected:
gpointer
data
);
GstElement
*
pipeline
;
GstElement
*
uridecodebin
;
GstElement
*
v4l2src
;
GstElement
*
color
;
GstElement
*
sink
;
#if GST_VERSION_MAJOR > 0
...
...
@@ -164,6 +168,7 @@ void CvCapture_GStreamer::init()
{
pipeline
=
NULL
;
uridecodebin
=
NULL
;
v4l2src
=
NULL
;
color
=
NULL
;
sink
=
NULL
;
#if GST_VERSION_MAJOR > 0
...
...
@@ -368,9 +373,7 @@ void CvCapture_GStreamer::startPipeline()
if
(
status
==
GST_STATE_CHANGE_ASYNC
)
{
// wait for status update
GstState
st1
;
GstState
st2
;
status
=
gst_element_get_state
(
pipeline
,
&
st1
,
&
st2
,
GST_CLOCK_TIME_NONE
);
status
=
gst_element_get_state
(
pipeline
,
NULL
,
NULL
,
GST_CLOCK_TIME_NONE
);
}
if
(
status
==
GST_STATE_CHANGE_FAILURE
)
{
...
...
@@ -619,7 +622,9 @@ bool CvCapture_GStreamer::open( int type, const char* filename )
stream
=
true
;
manualpipeline
=
true
;
}
}
else
{
}
else
{
stream
=
true
;
uri
=
g_strdup
(
filename
);
}
...
...
@@ -640,68 +645,86 @@ bool CvCapture_GStreamer::open( int type, const char* filename )
uridecodebin
=
gst_element_make_from_uri
(
GST_URI_SRC
,
uri
,
"src"
,
NULL
);
#endif
element_from_uri
=
true
;
}
else
{
}
else
{
uridecodebin
=
gst_element_factory_make
(
"uridecodebin"
,
NULL
);
g_object_set
(
G_OBJECT
(
uridecodebin
),
"uri"
,
uri
,
NULL
);
}
g_free
(
protocol
);
if
(
!
uridecodebin
)
{
if
(
!
uridecodebin
)
{
//fprintf(stderr, "GStreamer: Error opening bin: %s\n", err->message);
close
();
return
false
;
}
}
if
(
manualpipeline
)
if
(
manualpipeline
)
{
GstIterator
*
it
=
NULL
;
#if GST_VERSION_MAJOR == 0
it
=
gst_bin_iterate_sinks
(
GST_BIN
(
uridecodebin
));
if
(
gst_iterator_next
(
it
,
(
gpointer
*
)
&
sink
)
!=
GST_ITERATOR_OK
)
{
CV_ERROR
(
CV_StsError
,
"GStreamer: cannot find appsink in manual pipeline
\n
"
);
return
false
;
}
#else
it
=
gst_bin_iterate_sinks
(
GST_BIN
(
uridecodebin
));
GstIterator
*
it
=
gst_bin_iterate_elements
(
GST_BIN
(
uridecodebin
));
gboolean
done
=
FALSE
;
GstElement
*
element
=
NULL
;
gboolean
done
=
false
;
gchar
*
name
=
NULL
;
#if GST_VERSION_MAJOR > 0
GValue
value
=
G_VALUE_INIT
;
#endif
while
(
!
done
)
{
switch
(
gst_iterator_next
(
it
,
&
value
))
{
while
(
!
done
)
{
#if GST_VERSION_MAJOR > 0
switch
(
gst_iterator_next
(
it
,
&
value
))
{
case
GST_ITERATOR_OK
:
element
=
GST_ELEMENT
(
g_value_get_object
(
&
value
));
name
=
gst_element_get_name
(
element
);
if
(
name
){
if
(
strstr
(
name
,
"opencvsink"
)
!=
NULL
||
strstr
(
name
,
"appsink"
)
!=
NULL
)
{
sink
=
GST_ELEMENT
(
gst_object_ref
(
element
)
);
done
=
TRUE
;
element
=
GST_ELEMENT
(
g_value_get_object
(
&
value
));
#else
switch
(
gst_iterator_next
(
it
,
(
gpointer
*
)
&
element
))
{
case
GST_ITERATOR_OK
:
#endif
name
=
gst_element_get_name
(
element
);
if
(
name
)
{
if
(
strstr
(
name
,
"opencvsink"
)
!=
NULL
||
strstr
(
name
,
"appsink"
)
!=
NULL
)
{
sink
=
GST_ELEMENT
(
gst_object_ref
(
element
)
);
}
else
if
(
strstr
(
name
,
COLOR_ELEM_NAME
)
!=
NULL
)
{
color
=
GST_ELEMENT
(
gst_object_ref
(
element
)
);
}
else
if
(
strstr
(
name
,
"v4l"
)
!=
NULL
)
{
v4l2src
=
GST_ELEMENT
(
gst_object_ref
(
element
)
);
}
g_free
(
name
);
done
=
sink
&&
color
&&
v4l2src
;
}
g_free
(
name
);
}
g_value_unset
(
&
value
);
#if GST_VERSION_MAJOR > 0
g_value_unset
(
&
value
);
#endif
break
;
break
;
case
GST_ITERATOR_RESYNC
:
gst_iterator_resync
(
it
);
break
;
gst_iterator_resync
(
it
);
break
;
case
GST_ITERATOR_ERROR
:
case
GST_ITERATOR_DONE
:
done
=
TRUE
;
break
;
}
done
=
TRUE
;
break
;
}
}
gst_iterator_free
(
it
);
if
(
!
sink
)
{
if
(
!
sink
)
{
CV_ERROR
(
CV_StsError
,
"GStreamer: cannot find appsink in manual pipeline
\n
"
);
return
false
;
}
#endif
pipeline
=
uridecodebin
;
}
else
...
...
@@ -714,18 +737,23 @@ bool CvCapture_GStreamer::open( int type, const char* filename )
gst_bin_add_many
(
GST_BIN
(
pipeline
),
uridecodebin
,
color
,
sink
,
NULL
);
if
(
element_from_uri
)
{
if
(
!
gst_element_link
(
uridecodebin
,
color
))
{
if
(
element_from_uri
)
{
if
(
!
gst_element_link
(
uridecodebin
,
color
))
{
CV_ERROR
(
CV_StsError
,
"GStreamer: cannot link color -> sink
\n
"
);
gst_object_unref
(
pipeline
);
pipeline
=
NULL
;
return
false
;
}
}
else
{
}
else
{
g_signal_connect
(
uridecodebin
,
"pad-added"
,
G_CALLBACK
(
newPad
),
color
);
}
if
(
!
gst_element_link
(
color
,
sink
))
{
if
(
!
gst_element_link
(
color
,
sink
))
{
CV_ERROR
(
CV_StsError
,
"GStreamer: cannot link color -> sink
\n
"
);
gst_object_unref
(
pipeline
);
pipeline
=
NULL
;
...
...
@@ -753,16 +781,13 @@ bool CvCapture_GStreamer::open( int type, const char* filename )
gst_app_sink_set_caps
(
GST_APP_SINK
(
sink
),
caps
);
gst_caps_unref
(
caps
);
// For video files only: set pipeline to PAUSED state to get its duration
if
(
file
)
{
status
=
gst_element_set_state
(
GST_ELEMENT
(
pipeline
),
GST_STATE_PAUSED
);
status
=
gst_element_set_state
(
GST_ELEMENT
(
pipeline
),
file
?
GST_STATE_PAUSED
:
GST_STATE_PLAYING
);
if
(
status
==
GST_STATE_CHANGE_ASYNC
)
{
// wait for status update
GstState
st1
;
GstState
st2
;
status
=
gst_element_get_state
(
pipeline
,
&
st1
,
&
st2
,
GST_CLOCK_TIME_NONE
);
status
=
gst_element_get_state
(
pipeline
,
NULL
,
NULL
,
GST_CLOCK_TIME_NONE
);
}
if
(
status
==
GST_STATE_CHANGE_FAILURE
)
{
...
...
@@ -813,14 +838,9 @@ bool CvCapture_GStreamer::open( int type, const char* filename )
fps
=
(
double
)
num
/
(
double
)
denom
;
// GST_DEBUG_BIN_TO_DOT_FILE(GST_BIN(pipeline), GST_DEBUG_GRAPH_SHOW_ALL, "pipeline");
}
else
{
duration
=
-
1
;
width
=
-
1
;
height
=
-
1
;
fps
=
-
1
;
// GST_DEBUG_BIN_TO_DOT_FILE(GST_BIN(pipeline), GST_DEBUG_GRAPH_SHOW_ALL, "pipeline")
stopPipeline
();
}
__END__
;
...
...
@@ -851,7 +871,7 @@ double CvCapture_GStreamer::getProperty( int propId ) const
if
(
!
pipeline
)
{
CV_WARN
(
"GStreamer: no pipeline"
);
return
false
;
return
0
;
}
switch
(
propId
)
{
...
...
@@ -860,7 +880,7 @@ double CvCapture_GStreamer::getProperty( int propId ) const
status
=
gst_element_query_position
(
sink
,
FORMAT
,
&
value
);
if
(
!
status
)
{
CV_WARN
(
"GStreamer: unable to query position of stream"
);
return
false
;
return
0
;
}
return
value
*
1e-6
;
// nano seconds to milli seconds
case
CV_CAP_PROP_POS_FRAMES
:
...
...
@@ -868,7 +888,7 @@ double CvCapture_GStreamer::getProperty( int propId ) const
status
=
gst_element_query_position
(
sink
,
FORMAT
,
&
value
);
if
(
!
status
)
{
CV_WARN
(
"GStreamer: unable to query position of stream"
);
return
false
;
return
0
;
}
return
value
;
case
CV_CAP_PROP_POS_AVI_RATIO
:
...
...
@@ -876,7 +896,7 @@ double CvCapture_GStreamer::getProperty( int propId ) const
status
=
gst_element_query_position
(
sink
,
FORMAT
,
&
value
);
if
(
!
status
)
{
CV_WARN
(
"GStreamer: unable to query position of stream"
);
return
false
;
return
0
;
}
return
((
double
)
value
)
/
GST_FORMAT_PERCENT_MAX
;
case
CV_CAP_PROP_FRAME_WIDTH
:
...
...
@@ -895,6 +915,21 @@ double CvCapture_GStreamer::getProperty( int propId ) const
case
CV_CAP_PROP_CONTRAST
:
case
CV_CAP_PROP_SATURATION
:
case
CV_CAP_PROP_HUE
:
if
(
v4l2src
)
{
const
gchar
*
propName
=
propId
==
CV_CAP_PROP_BRIGHTNESS
?
"brightness"
:
propId
==
CV_CAP_PROP_CONTRAST
?
"contrast"
:
propId
==
CV_CAP_PROP_SATURATION
?
"saturation"
:
propId
==
CV_CAP_PROP_HUE
?
"hue"
:
NULL
;
if
(
propName
)
{
gint32
value32
=
0
;
g_object_get
(
G_OBJECT
(
v4l2src
),
propName
,
&
value32
,
NULL
);
return
value32
;
}
}
case
CV_CAP_PROP_GAIN
:
case
CV_CAP_PROP_CONVERT_RGB
:
break
;
...
...
@@ -911,7 +946,7 @@ double CvCapture_GStreamer::getProperty( int propId ) const
#undef FORMAT
return
false
;
return
0
;
}
/*!
...
...
@@ -990,6 +1025,21 @@ bool CvCapture_GStreamer::setProperty( int propId, double value )
case
CV_CAP_PROP_CONTRAST
:
case
CV_CAP_PROP_SATURATION
:
case
CV_CAP_PROP_HUE
:
if
(
v4l2src
)
{
const
gchar
*
propName
=
propId
==
CV_CAP_PROP_BRIGHTNESS
?
"brightness"
:
propId
==
CV_CAP_PROP_CONTRAST
?
"contrast"
:
propId
==
CV_CAP_PROP_SATURATION
?
"saturation"
:
propId
==
CV_CAP_PROP_HUE
?
"hue"
:
NULL
;
if
(
propName
)
{
gint32
value32
=
cv
::
saturate_cast
<
gint32
>
(
value
);
g_object_set
(
G_OBJECT
(
v4l2src
),
propName
,
&
value32
,
NULL
);
return
true
;
}
}
case
CV_CAP_PROP_GAIN
:
case
CV_CAP_PROP_CONVERT_RGB
:
break
;
...
...
modules/videoio/src/cap_images.cpp
浏览文件 @
9c0a5523
...
...
@@ -67,10 +67,11 @@ class CvCapture_Images : public CvCapture
public:
CvCapture_Images
()
{
filename
=
0
;
filename
=
NULL
;
currentframe
=
firstframe
=
0
;
length
=
0
;
frame
=
0
;
frame
=
NULL
;
grabbedInOpen
=
false
;
}
virtual
~
CvCapture_Images
()
...
...
@@ -92,6 +93,7 @@ protected:
unsigned
length
;
// length of sequence
IplImage
*
frame
;
bool
grabbedInOpen
;
};
...
...
@@ -100,7 +102,7 @@ void CvCapture_Images::close()
if
(
filename
)
{
free
(
filename
);
filename
=
0
;
filename
=
NULL
;
}
currentframe
=
firstframe
=
0
;
length
=
0
;
...
...
@@ -113,17 +115,25 @@ bool CvCapture_Images::grabFrame()
char
str
[
_MAX_PATH
];
sprintf
(
str
,
filename
,
firstframe
+
currentframe
);
if
(
grabbedInOpen
)
{
grabbedInOpen
=
false
;
++
currentframe
;
return
frame
!=
NULL
;
}
cvReleaseImage
(
&
frame
);
frame
=
cvLoadImage
(
str
,
CV_LOAD_IMAGE_ANYDEPTH
|
CV_LOAD_IMAGE_ANYCOLOR
);
if
(
frame
)
currentframe
++
;
return
frame
!=
0
;
return
frame
!=
NULL
;
}
IplImage
*
CvCapture_Images
::
retrieveFrame
(
int
)
{
return
frame
;
return
grabbedInOpen
?
NULL
:
frame
;
}
double
CvCapture_Images
::
getProperty
(
int
id
)
const
...
...
@@ -168,6 +178,8 @@ bool CvCapture_Images::setProperty(int id, double value)
value
=
length
-
1
;
}
currentframe
=
cvRound
(
value
);
if
(
currentframe
!=
0
)
grabbedInOpen
=
false
;
// grabbed frame is not valid anymore
return
true
;
case
CV_CAP_PROP_POS_AVI_RATIO
:
if
(
value
>
1
)
{
...
...
@@ -178,6 +190,8 @@ bool CvCapture_Images::setProperty(int id, double value)
value
=
0
;
}
currentframe
=
cvRound
((
length
-
1
)
*
value
);
if
(
currentframe
!=
0
)
grabbedInOpen
=
false
;
// grabbed frame is not valid anymore
return
true
;
}
CV_WARN
(
"unknown/unhandled property
\n
"
);
...
...
@@ -280,7 +294,13 @@ bool CvCapture_Images::open(const char * _filename)
}
firstframe
=
offset
;
return
true
;
// grab frame to enable properties retrieval
bool
grabRes
=
grabFrame
();
grabbedInOpen
=
true
;
currentframe
=
0
;
return
grabRes
;
}
...
...
@@ -292,7 +312,7 @@ CvCapture* cvCreateFileCapture_Images(const char * filename)
return
capture
;
delete
capture
;
return
0
;
return
NULL
;
}
//
...
...
modules/videoio/test/test_ffmpeg.cpp
浏览文件 @
9c0a5523
...
...
@@ -431,6 +431,10 @@ TEST(Videoio_Video_parallel_writers_and_readers, accuracy)
if
(
code
==
1
)
std
::
cerr
<<
"Couldn't delete "
<<
*
i
<<
std
::
endl
;
}
// delete the readers
for
(
std
::
vector
<
VideoCapture
*>::
iterator
i
=
readers
.
begin
(),
end
=
readers
.
end
();
i
!=
end
;
++
i
)
delete
*
i
;
}
#endif
samples/gpu/CMakeLists.txt
浏览文件 @
9c0a5523
...
...
@@ -81,6 +81,10 @@ if(BUILD_EXAMPLES AND OCV_DEPENDENCIES_FOUND)
file
(
GLOB all_samples RELATIVE
${
CMAKE_CURRENT_SOURCE_DIR
}
*.cpp
)
if
(
NOT WITH_OPENGL
)
list
(
REMOVE_ITEM all_samples
"opengl.cpp"
)
endif
(
NOT WITH_OPENGL
)
foreach
(
sample_filename
${
all_samples
}
)
get_filename_component
(
sample
${
sample_filename
}
NAME_WE
)
file
(
GLOB sample_srcs RELATIVE
${
CMAKE_CURRENT_SOURCE_DIR
}
${
sample
}
.*
)
...
...
@@ -92,6 +96,9 @@ endif()
if
(
INSTALL_C_EXAMPLES AND NOT WIN32
)
file
(
GLOB install_list *.c *.cpp *.jpg *.png *.data makefile.* build_all.sh *.dsp *.cmd
)
if
(
NOT WITH_OPENGL
)
list
(
REMOVE_ITEM all_samples
"opengl.cpp"
)
endif
(
NOT WITH_OPENGL
)
install
(
FILES
${
install_list
}
DESTINATION
${
OPENCV_SAMPLES_SRC_INSTALL_PATH
}
/gpu
PERMISSIONS OWNER_READ GROUP_READ WORLD_READ COMPONENT samples
)
...
...
samples/gpu/opengl.cpp
浏览文件 @
9c0a5523
#include <iostream>
#include "cvconfig.h"
#ifndef HAVE_OPENGL
int
main
()
{
std
::
cerr
<<
"Library was built without OpenGL support"
<<
std
::
endl
;
return
-
1
;
}
#else
#ifdef WIN32
#define WIN32_LEAN_AND_MEAN 1
...
...
@@ -124,5 +115,3 @@ int main(int argc, char* argv[])
return
0
;
}
#endif
编辑
预览
Markdown
is supported
0%
请重试
或
添加新附件
.
添加附件
取消
You are about to add
0
people
to the discussion. Proceed with caution.
先完成此消息的编辑!
取消
想要评论请
注册
或
登录