Devs.tw 是讓工程師寫筆記、網誌的平台。歡迎您隨手紀錄、寫作,方便日後搜尋!
因為是學校的作業,老師開了叢集給我們用,但是卻不知道為甚麼找不到libopencv-dev(就是不能直接
include拉QQ)
那要怎麼解決咧?lab大學長給了以下的解決辦法:
首先先看到include
//main.cpp
#include <iostream>
//這些都是老師的叢集上的opencv的位置
#include <opencv4/opencv2/core/core.hpp>
#include <opencv4/opencv2/imgcodecs/imgcodecs.hpp>
先指定好lib的位置
每include一個額外套件就在bash裡面多加一個小片段:
#bash
g++ main.cpp -o main -I /usr/include/opencv4/ -L /usr/lib -lopencv_core -lopencv_imgcodecs
^opencv_lib ^lib ^1 ^2
然後就可以拉! BTW原本的本機檔案是有寫個waitkey(0),但是在叢集上就沒辦法show GUI了對吧,所以就拿掉了。
我去NASA上面找到了幾張 世 界 大 的地球圖片,然後呢我想要找出藍藍的海洋的面積,於是想要用
pixel數量來算出總共有多少pixel,所以先把不是海洋的地方都變成白色的,海洋變成黑色的,在計算黑色
pixel的數量就好了。
那Makefile的設定呢?嘿嘿之後再放上來好惹
Full code:
#include <iostream>
#include <opencv4/opencv2/core/core.hpp>
#include <opencv4/opencv2/imgcodecs/imgcodecs.hpp>
using namespace cv;
using namespace std;
//
#pragma once
#include <chrono>
class stopWatch {
std::chrono::time_point<std::chrono::steady_clock> t1, t2;
public:
stopWatch();
void start(void);
void stop(void);
double elapsedTime(void);
};
stopWatch::stopWatch() {
t1 = t2 = std::chrono::steady_clock::now();
}
void stopWatch::start() {
t1 = std::chrono::steady_clock::now();
}
void stopWatch::stop() {
t2 = std::chrono::steady_clock::now();
}
double stopWatch::elapsedTime() {
auto duration = t2 - t1;
return std::chrono::duration<double, std::micro>(t2 - t1).count() / 1.0e6;
}
//
bool isGreen(const Vec3b &color) {
if (color[0] < color[1]) {
return true;
} else {
return false;
}
};
bool isBlue(const Vec3b &color) {
if ((135 < color[0] && color[0] < 255)) {
if (isGreen(color)) {
return false;
} else {
return true;
}
} else {
return false;
}
};
bool isWhite(const Vec3b &color) {
if (225 < color[0] && 225 < color[1] && 225 < color[2]) {
return true;
} else {
return false;
}
};
int main(int argc, char **argv) {
// argv[1] = image path
stopWatch t[2];
t[0].start();
Mat image = imread(argv[1]);
for (int y = 0; y < image.rows; y++) {
for (int x = 0; x < image.cols; x++) {
Vec3b &color = image.at<Vec3b>(y, x);
if (isBlue(color)) {
for (int i = 0; i < sizeof(color) / sizeof(color[0]); i++) {
color[i] = 255;
}
} else if (isGreen(color)) {
for (int i = 0; i < sizeof(color) / sizeof(color[0]); i++) {
color[i] = 255;
}
} else if (isWhite(color)) {
for (int i = 0; i < sizeof(color) / sizeof(color[0]); i++) {
color[i] = 255;
}
} else {
for (int i = 0; i < sizeof(color) / sizeof(color[0]); i++) {
color[i] = 0;
}
}
}
}
t[0].stop();
t[1].start();
int black, white = 0;
for (int y = 0; y < image.rows; y++) {
for (int x = 0; x < image.cols; x++) {
Vec3b &color = image.at<Vec3b>(y, x);
if (color[0] == 0) {
black++;
} else {
white++;
}
}
}
t[1].stop();
// namedWindow("Image", WINDOW_AUTOSIZE);
// imshow("Image", image);
imwrite("resize_out.png", image);
cout << "Black: " << black << " White: " << white << endl;
int ti = 1;
for (auto &i : t) {
cout << "t[" << ti << "]" << i.elapsedTime() << ", ";
ti++;
}
cout << endl;
return 0;
}
謝謝加入筆記&分享的行列!這些都會對後人很有幫助!👍👍👍
您好,在PTT上面看到的推廣的文章就來使用看看了。自己本身蠻喜歡Markdown的邏輯,初次嘗鮮論壇