Fix building for MS VS C++: remove allocation of arrays of dynamic size in stack

pull/14/head
Victor Passichenko 13 years ago
parent 017ab51bf4
commit 92edd4fc6e
  1. 4
      modules/photo/src/denoising.cpp
  2. 14
      modules/photo/src/fast_nlmeans_denoising_invoker.hpp
  3. 17
      modules/photo/src/fast_nlmeans_multi_denoising_invoker.hpp

@ -103,7 +103,7 @@ static void fastNlMeansDenoisingMultiCheckPreconditions(
int imgToDenoiseIndex, int temporalWindowSize, int imgToDenoiseIndex, int temporalWindowSize,
int templateWindowSize, int searchWindowSize) int templateWindowSize, int searchWindowSize)
{ {
int src_imgs_size = srcImgs.size(); int src_imgs_size = (int)srcImgs.size();
if (src_imgs_size == 0) { if (src_imgs_size == 0) {
CV_Error(CV_StsBadArg, "Input images vector should not be empty!"); CV_Error(CV_StsBadArg, "Input images vector should not be empty!");
} }
@ -176,7 +176,7 @@ void cv::fastNlMeansDenoisingColoredMulti( const std::vector<Mat>& srcImgs,
temporalWindowSize, templateWindowSize, searchWindowSize temporalWindowSize, templateWindowSize, searchWindowSize
); );
int src_imgs_size = srcImgs.size(); int src_imgs_size = (int)srcImgs.size();
if (srcImgs[0].type() != CV_8UC3) { if (srcImgs[0].type() != CV_8UC3) {
CV_Error(CV_StsBadArg, "Type of input images should be CV_8UC3!"); CV_Error(CV_StsBadArg, "Type of input images should be CV_8UC3!");

@ -62,6 +62,10 @@ struct FastNlMeansDenoisingInvoker {
void operator() (const BlockedRange& range) const; void operator() (const BlockedRange& range) const;
void operator= (const FastNlMeansDenoisingInvoker& invoker) {
CV_Error(CV_StsNotImplemented, "Assigment operator is not implemented");
}
private: private:
const Mat& src_; const Mat& src_;
Mat& dst_; Mat& dst_;
@ -153,16 +157,12 @@ void FastNlMeansDenoisingInvoker<T>::operator() (const BlockedRange& range) cons
int row_from = range.begin(); int row_from = range.begin();
int row_to = range.end() - 1; int row_to = range.end() - 1;
int dist_sums_array[search_window_size_ * search_window_size_]; Array2d<int> dist_sums(search_window_size_, search_window_size_);
Array2d<int> dist_sums(dist_sums_array, search_window_size_, search_window_size_);
// for lazy calc optimization // for lazy calc optimization
int col_dist_sums_array[template_window_size_ * search_window_size_ * search_window_size_]; Array3d<int> col_dist_sums(template_window_size_, search_window_size_, search_window_size_);
Array3d<int> col_dist_sums(&col_dist_sums_array[0],
template_window_size_, search_window_size_, search_window_size_);
int first_col_num = -1; int first_col_num = -1;
Array3d<int> up_col_dist_sums(src_.cols, search_window_size_, search_window_size_); Array3d<int> up_col_dist_sums(src_.cols, search_window_size_, search_window_size_);
for (int i = row_from; i <= row_to; i++) { for (int i = row_from; i <= row_to; i++) {
@ -233,7 +233,7 @@ void FastNlMeansDenoisingInvoker<T>::operator() (const BlockedRange& range) cons
// calc weights // calc weights
int weights_sum = 0; int weights_sum = 0;
int estimation[src_.channels()]; int estimation[3];
for (int channel_num = 0; channel_num < src_.channels(); channel_num++) { for (int channel_num = 0; channel_num < src_.channels(); channel_num++) {
estimation[channel_num] = 0; estimation[channel_num] = 0;
} }

@ -63,6 +63,10 @@ struct FastNlMeansMultiDenoisingInvoker {
void operator() (const BlockedRange& range) const; void operator() (const BlockedRange& range) const;
void operator= (const FastNlMeansMultiDenoisingInvoker& invoker) {
CV_Error(CV_StsNotImplemented, "Assigment operator is not implemented");
}
private: private:
int rows_; int rows_;
int cols_; int cols_;
@ -175,16 +179,11 @@ void FastNlMeansMultiDenoisingInvoker<T>::operator() (const BlockedRange& range)
int row_from = range.begin(); int row_from = range.begin();
int row_to = range.end() - 1; int row_to = range.end() - 1;
int dist_sums_array[temporal_window_size_ * search_window_size_ * search_window_size_]; Array3d<int> dist_sums(temporal_window_size_, search_window_size_, search_window_size_);
Array3d<int> dist_sums(dist_sums_array,
temporal_window_size_, search_window_size_, search_window_size_);
// for lazy calc optimization // for lazy calc optimization
int col_dist_sums_array[ Array4d<int> col_dist_sums(
template_window_size_ * temporal_window_size_ * search_window_size_ * search_window_size_]; template_window_size_, temporal_window_size_, search_window_size_, search_window_size_);
Array4d<int> col_dist_sums(col_dist_sums_array,
template_window_size_, temporal_window_size_, search_window_size_, search_window_size_);
int first_col_num = -1; int first_col_num = -1;
@ -263,7 +262,7 @@ void FastNlMeansMultiDenoisingInvoker<T>::operator() (const BlockedRange& range)
// calc weights // calc weights
int weights_sum = 0; int weights_sum = 0;
int estimation[channels_count_]; int estimation[3];
for (int channel_num = 0; channel_num < channels_count_; channel_num++) { for (int channel_num = 0; channel_num < channels_count_; channel_num++) {
estimation[channel_num] = 0; estimation[channel_num] = 0;
} }

Loading…
Cancel
Save