انجمنهای فارسی اوبونتو
کمک و پشتیبانی => برنامهسازی => نویسنده: learner:~$ در 23 امرداد 1403، 07:35 بظ
-
درود
امروز مجبور شدم که با زبا س پ پ و با این کتابخانه یک پروژّ کوچیک انجام بدم.
اول کتابخانه opencv4 رو با استفاده از دستور زیر نصب کردم
sudo pacman -Sy opencv
وقتی هم که میخوام از فایل های سرآیند استفاده کنم اول باید برم تو پوشه opencv4 و بعد opencv2 و فایل های سرآبند خودم رو انتخاب کنم.
وقتی هم که میخواستم از توابع و متد ها استفاده کنم همش ارور میداد و میگفت که این فایل سرایند وجود نداره. درصورتی که من چک کردم و وجود داشت.
به خاطر همین opencv2/ رو یک دایرکتور به عقب انتقال دادم و همه هشدار ها رفت.
من از هوش مصنوعی پرسیدم چطور کامپایل کنه و اونم گفت اینطور:
g++ webcam.cpp -o webcam pkg-config --cflags --libs opencv4
اما خروجی زیر رو میده:
g++: error: unrecognized command-line option ‘--cflags’
g++: error: unrecognized command-line option ‘--libs’; did you mean ‘--libs=’?
واقعا کلافه شدم نمیدونم باید چیکار کنم.
کد برنامه :
#include <cstdio>
#include <iostream>
#include <opencv2/core/mat.hpp>
#include <opencv2/highgui.hpp>
#include <opencv2/imgcodecs.hpp>
#include <opencv2/opencv.hpp>
#include <opencv2/videoio.hpp>
int main()
{
cv::VideoCapture cap(0);
if(!cap.isOpened())
{
perror("can not open camera");
return -1;
}
cv::Mat frame;
cap >> frame;
if(frame.empty())
{
perror("can not capture a frame");
return -1;
}
cv::imwrite("captured_image", frame);
cv::imshow("captured image", frame);
cv::waitKey(0);
cap.release();
cv::destroyAllWindows() ;
return 0;
}
-
#include <libuvc/libuvc.h>
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#include <jpeglib.h>
void save_jpeg(const char *filename, unsigned char *image_buffer, int width, int height) {
struct jpeg_compress_struct cinfo;
struct jpeg_error_mgr jerr;
FILE *outfile;
JSAMPROW row_pointer[1];
cinfo.err = jpeg_std_error(&jerr);
jpeg_create_compress(&cinfo);
if ((outfile = fopen(filename, "wb")) == NULL) {
fprintf(stderr, "Can't open %s\n", filename);
return;
}
jpeg_stdio_dest(&cinfo, outfile);
cinfo.image_width = width;
cinfo.image_height = height;
cinfo.input_components = 3; // تعداد کانالهای رنگ (RGB)
cinfo.in_color_space = JCS_RGB;
jpeg_set_defaults(&cinfo);
jpeg_start_compress(&cinfo, TRUE);
while (cinfo.next_scanline < cinfo.image_height) {
row_pointer[0] = &image_buffer[cinfo.next_scanline * width * 3];
jpeg_write_scanlines(&cinfo, row_pointer, 1);
}
jpeg_finish_compress(&cinfo);
fclose(outfile);
}
void frame_callback(uvc_frame_t *frame, void *ptr) {
unsigned char *image_buffer = malloc(frame->width * frame->height * 3); // فرض بر این است که تصویر RGB است.
save_jpeg("captured_image.jpg", image_buffer, frame->width, frame->height);
free(image_buffer);
}
int main() {
uvc_context_t *ctx;
uvc_device_t *dev;
uvc_device_handle_t *devh;
uvc_stream_ctrl_t ctrl;
if (uvc_init(&ctx, NULL) < 0) {
fprintf(stderr, "Error initializing libuvc\n");
return -1;
}
if (uvc_find_device(ctx, &dev, 0, 0, NULL) < 0) {
fprintf(stderr, "Device not found\n");
return -1;
}
if (uvc_open(dev, &devh) < 0) {
fprintf(stderr, "Unable to open device\n");
return -1;
}
uvc_get_stream_ctrl_format_size(devh, &ctrl, UVC_FRAME_FORMAT_YUYV, 640, 480, 30);
uvc_start_streaming(devh, &ctrl, frame_callback, NULL, 0);
printf("Press Enter to stop streaming...\n");
getchar();
uvc_stop_streaming(devh);
uvc_close(devh);
uvc_unref_device(dev);
uvc_exit(ctx);
return 0;
}
gcc main.c -luvc -ljpeg
./web: error while loading shared libraries: libuvc.so.0: cannot open shared object file: No such file or directory
-
خطا نشون میده که کتابخانه libuvc.so.0 به درستی نصب نشده در نتیجه gcc نتونسته مرحلهٔ پیوند را انجام دهد.
بررسی کنید و از روش صحیحی کتابخانههای مورد نظر را روی توزیعتان نصب کنید.
ابتدا سعی کنید سادهترین مثال hello world را راهاندازی کنید.
-
در دبیان باید بستهی libucv0 رو نصب کنی ولی در آرچ برو در aur بستهی libuvc را نصب کن ببین چی میشه.
-
در دبیان باید بستهی libucv0 رو نصب کنی ولی در آرچ برو در aur بستهی libuvc را نصب کن ببین چی میشه.
با استفاده از yay اینکار رو کردم الان مشکلم opencv هست
-
با استفاده از yay اینکار رو کردم الان مشکلم opencv هست
الآن مشکلش چیه؟ خطایی داده؟
-
چطور باید opencv رو include و compile بکنم؟
-
بزن ببین چی میشه
g++ -lopencv4
-
سلام!
دستوری که برای کامپایل اجرا می کنی اشتباهه!
pkg-config یه برنامه هست که فلگ و مسیر درست کتابخونه های نصب شده رو نشون میده (به stdout میفرسته) و تو باید خروجی اون رو به عنوان پارامتر خط فرمان به کامپایلر بدی.
g++ webcam.cpp -o webcam pkg-config --cflags --libs opencv4
باید اینجوری باشه:
g++ webcam.cpp -o webcam $(pkg-config --cflags --libs opencv4)
در مورد اسم کتابخونه مطمئن نیستم. اگه اسمش رو درست نوشتی پس باید همون دستوری رو که گفتم اجرا کنی.
-
فعلا تو اضافه کردن فایل سرآیند به مشکل خوردم :
اضلا چطور باید اضافه بشه این چرا اینجوریه!
-
احتمالا خوندن یک کتاب سیپلاسپلاس بهتر و سریعتر بهتون کمک میکنه تا اینکه سعی کنید با تست کردن یاد بگیرید.
#include "PATH"
[/code]
-
احتمالا خوندن یک کتاب سیپلاسپلاس بهتر و سریعتر بهتون کمک میکنه تا اینکه سعی کنید با تست کردن یاد بگیرید.
#include "PATH"
[/code]
خیلی عجیبه:
( مثلا الان من برم دستورات زیر رو بزنم ۹۰ درصد ارور ها از بین میره :
cd /usr/include/opencv4
mv opencv2 ..
اما خب این فکر نکنم درست باشه و فکر کنم کامپایل مسیر رو گم بکنه.)
-
برو کمی خود پرونده هاشو ببین چحوری پیشنمونه سازی کرده. چون کتابخانه های خودش به هم وصلن.
دستی چیزی رو تغیر نده.
-
سلام دوباره
میشه راهنمایی کنید که چطور دستی opencv رو نصب و build کنم؟ مستندات رو خوندم اما میترسم که اشتباه بکنم.
-
توی اوبونتو و دبیان کافیه libopencv-dev رو نصب کنید. نیازی به نصب دستی اون نیست.
-
توی اوبونتو و دبیان کافیه libopencv-dev رو نصب کنید. نیازی به نصب دستی اون نیست.
خب من اونطوری نصب کردم ولی همش ارور میده نمیدونم باید چیکار کنم
-
برو opencv-doc رو نصب کن و مستنداتشو بخون.
-
احتمالا خوندن یک کتاب سیپلاسپلاس بهتر و سریعتر بهتون کمک میکنه تا اینکه سعی کنید با تست کردن یاد بگیرید.
#include "PATH"
[/code]
خیلی عجیبه:
( مثلا الان من برم دستورات زیر رو بزنم ۹۰ درصد ارور ها از بین میره :
cd /usr/include/opencv4
mv opencv2 ..
اما خب این فکر نکنم درست باشه و فکر کنم کامپایل مسیر رو گم بکنه.)
خب الان بعید نیست که سیستم رو به هم ریخته باشی!
اگه به هم ریخته باشه باید درستش کنی بعد اون بسته رو که neexoin گفته اگه نصب نکردی نصبش کنی
برای اینکه بدونی چجوری باید هدر رو include کنی، میتونی از مثال هایی که توی اینترنت هستن استفاده کنی.
-
توی اوبونتو و دبیان کافیه libopencv-dev رو نصب کنید. نیازی به نصب دستی اون نیست.
خب من اونطوری نصب کردم ولی همش ارور میده نمیدونم باید چیکار کنم
خروجی این رو بفرست:
ls -R /usr/include/opencv*
-
پروندهی opencv4/opencv2/opencv.hpp در بستهی libopencv-core-dev هست که با نصب libopencv-dev به صورت خودکار نصب میشه(البته در دبیان)، بهتره از دبیان استفاده کنید یا اگه از آرچ استفاده میکنید استفاده از اونو بلد باشید. در این انجمن جواب پرسش هاتونو در توزیع های دبیان پایه بهتر میگیرید. من که در آرچ اصلا نفهمیدم چیکار کنم.
و البته حالا که دیدم با نصب opencv در آرچ هم اون پرونده باید اضافه بشه و مشکل نحوه کامپایل شماست. پیشنمونه سازی پزونده های ضمیمهای عیبی نداره.
-
پروندهی opencv4/opencv2/opencv.hpp در بستهی libopencv-core-dev هست که با نصب libopencv-dev به صورت خودکار نصب میشه(البته در دبیان)، بهتره از دبیان استفاده کنید یا اگه از آرچ استفاده میکنید استفاده از اونو بلد باشید. در این انجمن جواب پرسش هاتونو در توزیع های دبیان پایه بهتر میگیرید. من که در آرچ اصلا نفهمیدم چیکار کنم.
و البته حالا که دیدم با نصب opencv در آرچ هم اون پرونده باید اضافه بشه و مشکل نحوه کامپایل شماست. پیشنمونه سازی پزونده های ضمیمهای عیبی نداره.
در آرچ همه این پرونده ها در یک کتابخانه قرار میگیرند.( در مخازن رسمی ).
و البته حالا که دیدم با نصب opencv در آرچ هم اون پرونده باید اضافه بشه و مشکل نحوه کامپایل شماست. پیشنمونه سازی پزونده های ضمیمهای عیبی نداره
متوجه نشدم؟
-
باید FLAGهاتون رو تصحیح کنید، بخصوص I- مهمه.
-
دوستان من هنوز نتونستم از فایل های سرآیند درست و حسابی استفاده بکنم اون وقت بخوام کامپایل کنم؟!
من نمیدونم مشکلش چیه هیچ ایده ایی ندارم ولی وقتی فایل سرآیند
opencv4/opencv2/opencv_modules
دو تا از ارور ها میره.
وقتی هم که دایرکتوری opencv2 رو انتقال میدم به /usr/include همه ارور ها میره.
اگر هم لازمه عکس از تک تک ارور ها بگیرم و بفرستم
-
روش استفاده از سرآیندها رو نوشته بودم که دوباره اشتباه نوشتید. ابتدا یک کتاب بخونید و بعد با پروژههای سادهتر شروع کنید. هر جایی سعی کنید پلهها رو بپرید که سریعتر به مقصد برسید، جلوترش احتمالا با فشار بیشتری زمین میخورید.
-
روش استفاده از سرآیندها رو نوشته بودم که دوباره اشتباه نوشتید. ابتدا یک کتاب بخونید و بعد با پروژههای سادهتر شروع کنید. هر جایی سعی کنید پلهها رو بپرید که سریعتر به مقصد برسید، جلوترش احتمالا با فشار بیشتری زمین میخورید.
میشه دوباره توضیح بدید؟
یعنی میگید پول بدم واسه یک کتاب که به بگه چطور با س پ پ برنامه بنویسم؟علاقه ایی ندارم. میدونم دارم چیکار میکنم خوندن کتاب وقت تلف کردنه اونم واسه این زبان
-
خب پس چرا با زبانی کار میکنی که یاد گرفتنش وقت تلف کردنه؟
-
خب پس چرا با زبانی کار میکنی که یاد گرفتنش وقت تلف کردنه؟
من هیچوقت از زبان س پ پ خوشم نیومده. اگر راهی سراغ دارید که از این کتابخانه اوپن سی وی بشه در زبان سی استفاده کرد بفرمایید و لطف کنید راهنمایی کنید. ;D
در غیر این صورت اگر میدونید چطور میشه از این کتابخانه تو س پ پ استفاده کرد بهم بگید باید چیکار کنم.
-
مشکلی که دارید توی سی و سیپلاسپلاس یکسانه. باید روش استفاده از سرآیندها و آرگومانهای کامپایلر (مثلا CFLAGS) رو یاد بگیرید که اونها هم تقریبا توی سی و سیپلاسپلاس یکی هستند. پیشنهاد من نوشتن برنامههای سادهتر برای شروعه و بعدش سراغ کتابخونههای پیچیدهای مثل OpenCV برید. بهترین گزینه هم به نظر من کتابه.
-
مشکلی که دارید توی سی و سیپلاسپلاس یکسانه. باید روش استفاده از سرآیندها و آرگومانهای کامپایلر (مثلا CFLAGS) رو یاد بگیرید که اونها هم تقریبا توی سی و سیپلاسپلاس یکی هستند. پیشنهاد من نوشتن برنامههای سادهتر برای شروعه و بعدش سراغ کتابخونههای پیچیدهای مثل OpenCV برید. بهترین گزینه هم به نظر من کتابه.
اینی که گفتید هیچ ربطی به برنامه نوشتن با زبان سی و س پ پ نداره و همش درمورد لینک و فایل های سرآیند و make, cmake هست. البته نمیشه گفت ربطشون به همدیگه ۰ درصده ولی الان به هیچ عنوان یاد گیری سی فلگ ها بدرد من نمیخور.
لطفا نگید که چیکار کنم یا نکنم هرکسی هرچی دوست داشته باشه میتونه یاد بگیره به اندازه فرسته های این تاپیک فقط کتاب برنامه نویسی دارم.
اینطوری بقیه رو گمراه میکنید معرفی کتاب فقط واسه ابتدای کار خوبه نه منی که الان میفهمم کد نویسی چیه.
کم کم دارم صبرم رو از دست میدم میخوام برم سراغ پرل.
حالا ببینم این کتابخانه چی میشه. میخوام از کتابخانه های دیگه استفاده کنم ولی اونا خیلی پیچیده تر از اوپن سی وی بودند.
-
لطفا نگید که چیکار کنم یا نکنم
دیگه وقتی اینجا سوال میپرسید، دارید از افراد تقاضا میکنید که بهتون بگن چیکار کنید یا نکنید. اینکه افراد چطوری سعی میکنن بهتون کمک کنن، خواست خودشونه.
اینطوری بقیه رو گمراه میکنید معرفی کتاب فقط واسه ابتدای کار خوبه نه منی که الان میفهمم کد نویسی چیه.
سعی کنید از خودتون جلو نیوفتید. این میتونه بزرگترین مانع برای پیشرفتتون باشه. من حدود ۲۵ ساله که برنامهنویسی میکنم، حداقل با ۱۰ زبان برنامهنویسی مختلف پروژههای بزرگ انجام دادم و هنوز اگر بخوام زبان جدیدی یاد بگیرم، با یک کتاب شروع میکنم.
-
دیگه وقتی اینجا سوال میپرسید، دارید از افراد تقاضا میکنید که بهتون بگن چیکار کنید یا نکنید. اینکه افراد چطوری سعی میکنن بهتون کمک کنن، خواست خودشونه.
اما فکر نمیکنم که من درخواست کمک برای یادگیری یک زبان کرده باشم و فکر کنم تاپیک هم حرف منو تایید میکنه.
من فقط میخوام از این کتابخانه استفاده کنم. نخواستم که بشینم س پ پ رو یاد بگیرم و علاقه ایی به یادگیریش ندارم.
سعی کنید از خودتون جلو نیوفتید. این میتونه بزرگترین مانع برای پیشرفتتون باشه. من حدود ۲۵ ساله که برنامهنویسی میکنم، حداقل با ۱۰ زبان برنامهنویسی مختلف پروژههای بزرگ انجام دادم و هنوز اگر بخوام زبان جدیدی یاد بگیرم، با یک کتاب شروع میکنم.
نحوه و درصد یادگیری هرکسی با دیگری متفاوته اینکه شما برای یادگیری کتاب میخونید و دیگری میاد ویدئو آموزشی میبینه یا مستندات رو مطالعه میکنه یا ... فرق دارند.
حالا اگر کسی کمک نمیکنه ایراد نداره ولی لطفا سرزنش نکنید. من میخوام یک پروژه برنامه نویسی انجام بدم که شوربختانه مجبورم از این کتابخانه استفاده بکنم. اگر مجبور نمیشدم اینکار رو نمیکردم.
-
نحوه یادگیری و درصد دیگه چیه؟
وقتی که موضوعی رو یاد نگرفتید، هیچ وقت پروژهای هم در اون مورد قبول نکنید.
واقعا این موضوعی نیست که در موردش اینجا سوال بشه. با این حال بقیه سعی کردن بهتون کمک کنن. ولی خودتون خیلی از چیزایی که ما باید بدونیم رو اینجا ارائه نکردید. الان مثلا نصف خطاها رفتن و چهار تا خطای دیگه اضافه شدن یعنی چی؟
چرا کسی نباید سرزنشتون کنه؟ یعنی سرزنش کردن اشتباهه؟!
اینکه فکر میکنن خوندن کتاب برای یادگیری بی فایده هست شاید به این خاطر باشه که هیچ وقت از خوندن کتاب چیزی یاد نگرفتید (حتی کتاب های درسی) فکر می کنم که باید از همین جا شروع کنید.
-
که نحوه یادگیری چیه؟ نحوه یادگیری یعنی اینکه یکی مثل من علاقه ایی به خوندن کتاب نداره و دنبال مستندات اون زبان و یکی مثل شما میخواد فیلم آموزشی ببینه و یکی مثل دیگری کتاب مطالعه میکنه.
میدونید فرق اساسی زبان س پ پ پ سی جیه؟ شئی گرایی! و کلاس و متد ها و ... اما نمیخواستم از شئی گرایی استفاده بکنم و همون توابع و ساختار ها کار بنده رو راه مینداخت. نمیدونم چرا انقدر دست و پا میزنید که من برم حتما کتاب بخونم ! خبری شده؟
میدونید کل سطح وب شده از این چرت و پرت ها که س پ پ بهتره از سی و ... و بهترین پروژه های برنامه نویسی و اینجوز چیزا. من علاقه ایی ندارم شما اگه دارید برای خودتون تاپیک بزنید باهم سرش بحث کنید. من پروژه هایی که میخوام و مینویسم فرق دارند.
هدف مهم نیست مسیر مهمه.این حرفی که زدید مثل اینه که شما حق ندارید در زبان سی از stdlib برای تولید اعداد رندوم استفاده بکنید و قبلش حتما حتما باید فرمول تولید اعداد رندوم رو بلد باشید.
چرا کسی نباید سرزنشتون کنه؟ یعنی سرزنش کردن اشتباهه؟!
نه تروخدا بفرمایید من رو بخاطر این زبان و کتابخانه مسخرش سرزنش بکنید.
اینکه فکر میکنن خوندن کتاب برای یادگیری بی فایده هست شاید به این خاطر باشه که هیچ وقت از خوندن کتاب چیزی یاد نگرفتید (حتی کتاب های درسی) فکر می کنم که باید از همین جا شروع کنید.
::)
من نگفتم خوندن کتاب بی فایده ست گفتم که واسه کسی مثل من که میدونه چطور کد بنویسه بی فایده ست. مخصوصا که الان زبان سی رو بلدم.
هرکاری دوست دارید بکنید.
از ناظر انجمن تقاضا دارم که این تاپیک رو منحل بکنه.
لعنت بر این زبان و نویسنده این زبان امیدوارم شاهد مرگ این زبان باشم.
خدانهدار.
-
خب اون کسی که بلده کد بنویسه بهش نمیگن برنامه نویس. یاد گرفتن کد نویسی وقت و انرژی زیادی نیاز نداره.
کسی نگفته که سی پلاس پلاس از سی بهتره.
به هر حال همون کتاب درسی رو در مرحله اول پیشنهاد می کنم
-
میدونید فرق اساسی زبان س پ پ پ سی جیه؟ شئی گرایی! و کلاس و متد ها و ...
فکر میکنم قبل از اینکه به بقیه در مورد یک زبان توضیح بدید، بهتره به عنوان قدم اول، اسم اون زبان رو یاد بگیرید. اسم اون زبان سیپلاسپلاسه.
از ناظر انجمن تقاضا دارم که این تاپیک رو منحل بکنه.
طبق درخواستتون این موضوع رو قفل میکنم.