Premise # 1: मैंने पहले से ही त्रुटि हल कर दी है, लेकिन मैंने संकलक त्रुटि के कारण को गहराई से समझ नहीं लिया।जब मैं एक [=] कैप्चर (लैम्ब्डा कक्षा का उपयोग कर) का उपयोग करता हूं तो एक चर 'कॉन्स्ट' क्यों बनता है?
Premise # 2: इस कार्यक्रम का लक्ष्य एक छवि को एक बहुप्रचारित प्रक्रिया द्वारा किसी अन्य छवि में कॉपी करना है। शायद एक बेहतर तरीका मौजूद है, लेकिन यह प्रश्न का फोकस विषय नहीं है (आधार # 1 देखें)।
मैंने एक छवि को दूसरी छवि में कॉपी करने के लिए ओपनसीवी 3.1 लाइब्रेरी का उपयोग करके एक सरल प्रोग्राम लिखा था। यह अधिक धागे का उपयोग कर सीपीयू के सभी कोर का लाभ उठाता है।
कोड है:
#include <opencv2/opencv.hpp>
#include <iostream>
#include <stdio.h>
#include <stdlib.h>
#include <thread>
using namespace cv;
using namespace std;
#define IMG_PATH "..\\img\\50a.png"
void copy_image(const Mat& input, Mat& output, int row_offset, int skip_row)
{
cout << row_offset;
Size size = input.size();
for (int r = row_offset; r < size.height; r += skip_row)
{
for (int c = 0; c < size.width; c++)
{
output.at<Vec3b>(r, c) = input.at<Vec3b>(r, c);
}
}
}
int main()
{
Mat input_img = imread(IMG_PATH);
Mat output_img = Mat(input_img.size(), input_img.type()); output_img.setTo(255);
vector<thread> threads;
int thread_number = thread::hardware_concurrency();
for (int i = 0; i < thread_number; i++)
{
cout << i;
auto var = [=]()
{
return copy_image(input_img, output_img, i, thread_number);
};
threads.push_back(thread(var));
}
for (auto& thread : threads)
thread.join();
imshow("output_img", output_img);
imwrite("result.png", output_img);
waitKey(0);
}
संकलक मुझे इस त्रुटि देता है
त्रुटि C2664 'शून्य copy_image (स्थिरांक सीवी :: चटाई &, सीवी :: चटाई &, पूर्णांक, पूर्णांक) ': से तर्क 2 परिवर्तित नहीं कर सकते' सीवी 'को' स्थिरांक सीवी :: चटाई :: चटाई & '
return copy_image(input_img, output_img, i, thread_number);
मैं इस
auto var = [=, &input_img, &output_img]()
के साथ इस लाइन
auto var = [=]()
की जगह इस त्रुटि को हल किया, लेकिन वास्तव में मैं गहराई से समझ में नहीं आता क्यों मुझे लगता है कि प्राप्त किया: यह कोड की इस पंक्ति reffers कि त्रुटि।
मेरी इच्छा है कि यह प्रोग्राम में परिभाषित _all_ ऑब्जेक्ट्स के लिए डिफ़ॉल्ट व्यवहार था: डिफ़ॉल्ट रूप से 'const'', इसे बदलने के लिए 'mutable' जोड़ें। – isanae