energy changed

This commit is contained in:
sun
2019-07-07 20:37:05 +08:00
parent 125c09b79e
commit 75ce387742
7 changed files with 45 additions and 17 deletions

View File

@@ -29,8 +29,8 @@ void ArmorFinder::run(cv::Mat &src) {
showArmorBox("box", src, armor_box, boxid); showArmorBox("box", src, armor_box, boxid);
cv::waitKey(1); cv::waitKey(1);
} }
// stateSearchingTarget(src_use); stateSearchingTarget(src_use);
// return; return;
switch (state){ switch (state){
case SEARCHING_STATE: case SEARCHING_STATE:
if(stateSearchingTarget(src_use)){ if(stateSearchingTarget(src_use)){

View File

@@ -118,6 +118,7 @@ private:
void splitBayerBG(cv::Mat src, cv::Mat &blue, cv::Mat &red);//拜耳阵列分离 void splitBayerBG(cv::Mat src, cv::Mat &blue, cv::Mat &red);//拜耳阵列分离
void imagePreprocess(cv::Mat &src);//图像通道分离 void imagePreprocess(cv::Mat &src);//图像通道分离
void hsvFilter(cv::Mat &src);//此函数通过HSV颜色空间对图像纯度进行限制进行滤光
void StructingElementClose(cv::Mat &src,int length, int width);//闭运算 void StructingElementClose(cv::Mat &src,int length, int width);//闭运算
void StructingElementErodeDilate(cv::Mat &src);//腐蚀和膨胀 void StructingElementErodeDilate(cv::Mat &src);//腐蚀和膨胀

View File

@@ -0,0 +1,28 @@
//
// Created by sun on 19-7-7.
//
#include "energy/energy.h"
using namespace std;
using namespace cv;
//----------------------------------------------------------------------------------------------------------------------
// 此函数用于利用HSV颜色空间对图像进行预处理
// ---------------------------------------------------------------------------------------------------------------------
void Energy::hsvFilter(cv::Mat &src){
Mat hsv, hsv_in_range;
cvtColor(src, hsv, CV_BGR2HSV);
// imshow("hsv", hsv);
vector<Mat> hsv_channels;
split(hsv, hsv_channels);
Mat H = hsv_channels.at(0);
Mat S = hsv_channels.at(1);
Mat V = hsv_channels.at(2);
// imshow("S", S);
inRange(hsv,Scalar(0,150,0),Scalar(180,255,255),hsv_in_range);
// imshow("in range", hsv_in_range);
}

View File

@@ -52,9 +52,9 @@ void Energy::imagePreprocess(cv::Mat &src) {
{ {
std::vector<Mat> channels; std::vector<Mat> channels;
split(src, channels); split(src, channels);
resize(channels.at(0), src_blue, Size(SRC_WIDTH, SRC_HEIGHT)); resize(channels.at(0), src_blue, Size(src.size().width/2, src.size().height/2));
resize(channels.at(1), src_green, Size(SRC_WIDTH, SRC_HEIGHT)); resize(channels.at(1), src_green, Size(src.size().width/2, src.size().height/2));
resize(channels.at(2), src_red, Size(SRC_WIDTH, SRC_HEIGHT)); resize(channels.at(2), src_red, Size(src.size().width/2, src.size().height/2));
if(ally_color == ALLY_RED) if(ally_color == ALLY_RED)
{ {
src = src_red-src_blue; src = src_red-src_blue;
@@ -64,7 +64,7 @@ void Energy::imagePreprocess(cv::Mat &src) {
//src=src_blue; //src=src_blue;
} }
} }
cv::resize(src, src, cv::Size(640, 480), 2); cv::resize(src, src, cv::Size(src.size().width * 2, src.size().height * 2), 2);
threshold(src, src, energy_part_param_.SPLIT_GRAY_THRESH, 255, THRESH_BINARY); threshold(src, src, energy_part_param_.SPLIT_GRAY_THRESH, 255, THRESH_BINARY);
} }

View File

@@ -73,7 +73,7 @@ int Energy::runBig(cv::Mat &gimble_src, cv::Mat &chassis_src){
// 此函数为大能量机关模式主控制流函数,且步兵仅拥有云台摄像头 // 此函数为大能量机关模式主控制流函数,且步兵仅拥有云台摄像头
// --------------------------------------------------------------------------------------------------------------------- // ---------------------------------------------------------------------------------------------------------------------
int Energy::runBig(cv::Mat &gimble_src){ int Energy::runBig(cv::Mat &gimble_src){
// imshow("src",src); imshow("src",gimble_src);
fans.clear(); fans.clear();
armors.clear(); armors.clear();
centerRs.clear(); centerRs.clear();
@@ -82,22 +82,21 @@ int Energy::runBig(cv::Mat &gimble_src){
changeMark(); changeMark();
if (isMark)return 0; if (isMark)return 0;
// imagePreprocess(src); // imagePreprocess(gimble_src);
// imshow("img_preprocess",src); // imshow("img_preprocess", gimble_src);
threshold(gimble_src, gimble_src, energy_part_param_.GRAY_THRESH, 255, THRESH_BINARY); threshold(gimble_src, gimble_src, energy_part_param_.GRAY_THRESH, 255, THRESH_BINARY);
// imshow("bin",src); imshow("bin",gimble_src);
fans_cnt = findFan(gimble_src, last_fans_cnt); fans_cnt = findFan(gimble_src, last_fans_cnt);
// cout<<"fans_cnt: "<<fans_cnt<<endl; // cout<<"fans_cnt: "<<fans_cnt<<endl;
if(fans_cnt==-1) return 0;//滤去漏判的帧 if(fans_cnt==-1) return 0;//滤去漏判的帧
// if(fans_cnt>0)showFanContours("fan",src); // if(fans_cnt>0)showFanContours("fan",src);
// fans_cnt=0;
armors_cnt = findArmor(gimble_src, last_armors_cnt); armors_cnt = findArmor(gimble_src, last_armors_cnt);
// cout<<"armors_cnt: "<<armors_cnt<<endl; // cout<<"armors_cnt: "<<armors_cnt<<endl;
if(armors_cnt==-1) return 0;//滤去漏判的帧 if(armors_cnt==-1) return 0;//滤去漏判的帧
// if(armors_cnt>0) showArmorContours("armor",src); // if(armors_cnt>0) showArmorContours("armor",gimble_src);
if(armors_cnt != fans_cnt+1) return 0; if(armors_cnt != fans_cnt+1) return 0;
@@ -142,7 +141,7 @@ int Energy::runSmall(cv::Mat &gimble_src){
imshow("gimble src", gimble_src); imshow("gimble src", gimble_src);
if(gimble_src.type()== CV_8UC3)cvtColor(gimble_src, gimble_src, COLOR_BGR2GRAY); if(gimble_src.type()== CV_8UC3)cvtColor(gimble_src, gimble_src, COLOR_BGR2GRAY);
fans.clear(); fans.clear();
armors.clear(); armors.clear();-
threshold(gimble_src, gimble_src, energy_part_param_.GRAY_THRESH, 255, THRESH_BINARY); threshold(gimble_src, gimble_src, energy_part_param_.GRAY_THRESH, 255, THRESH_BINARY);
imshow("bin",gimble_src); imshow("bin",gimble_src);
fans_cnt = findFan(gimble_src, last_fans_cnt); fans_cnt = findFan(gimble_src, last_fans_cnt);

View File

@@ -56,8 +56,8 @@ int main(int argc, char *argv[]) {
video_gimble = new CameraWrapper(0/*, "armor"*/); video_gimble = new CameraWrapper(0/*, "armor"*/);
video_chassis = new CameraWrapper(1/*, "energy"*/); video_chassis = new CameraWrapper(1/*, "energy"*/);
} else { } else {
video_gimble = new VideoWrapper("/Users/leo/Desktop/videos/179.avi"); video_gimble = new VideoWrapper("/home/sun/项目/energy_video/official_r_l.mp4");
video_chassis = new VideoWrapper("/Users/leo/Desktop/videos/179.avi"); video_chassis = new VideoWrapper("/home/sun/项目/energy_video/energy_test.avi");
} }
if (video_gimble->init()) { if (video_gimble->init()) {
LOGM("video_gimble source initialization successfully."); LOGM("video_gimble source initialization successfully.");
@@ -117,7 +117,7 @@ int main(int argc, char *argv[]) {
energy.runSmall(gimble_src); energy.runSmall(gimble_src);
} }
} }
cv::waitKey(1); // cv::waitKey(1);
}); });
} while (ok); } while (ok);

View File

@@ -76,7 +76,7 @@ bool CameraWrapper::init() {
#elif defined(Linux) #elif defined(Linux)
CameraSetAeState(h_camera, false); CameraSetAeState(h_camera, false);
CameraSetExposureTime(h_camera, 10*1000); CameraSetExposureTime(h_camera, 10*1000);
CameraSetAnalogGain(h_camera, 40); CameraSetAnalogGain(h_camera, 30);
if(mode == 0){ if(mode == 0){
CameraSetGain(h_camera, 100, 100, 100); CameraSetGain(h_camera, 100, 100, 100);
CameraSetLutMode(h_camera, LUTMODE_PRESET); CameraSetLutMode(h_camera, LUTMODE_PRESET);